Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译时的引用类型相等_Java_Reference - Fatal编程技术网

Java 编译时的引用类型相等

Java 编译时的引用类型相等,java,reference,Java,Reference,我在Java语言规范-8中遇到了以下语句。它指出,在编译时两个类是相同的,如果: 它们具有相同的二进制名称(外部类的规范名称) 它们的类型参数相同(如果有) 但为什么编译器会为其引发重复的类错误呢 class Test<String>{ ... } class Test<Integer>{ ... } 类测试{ ... } 课堂测试{ ... } 这里的二进制名称相同,但参数类型不同。这里缺少什么?它不是参数,而是泛型类的参数。此类型信息在运行时被

我在Java语言规范-8中遇到了以下语句。它指出,在编译时两个类是相同的,如果:

  • 它们具有相同的二进制名称(外部类的规范名称)
  • 它们的类型参数相同(如果有)
  • 但为什么编译器会为其引发重复的类错误呢

    class Test<String>{
        ...
    }
    
    class Test<Integer>{
        ...
    }
    
    类测试{
    ...
    }
    课堂测试{
    ...
    }
    

    这里的二进制名称相同,但参数类型不同。这里缺少什么?

    它不是参数,而是泛型类的参数。此类型信息在运行时被删除,因此从JVM的角度来看,它是相同的


    您可以在中阅读有关
    泛型
    类型擦除
    的更多信息。

    这是相同的类名,其泛型类型参数具有不同的任意名称。
    字符串
    整数
    有您自己选择的容易混淆的标识符;它们不是
    java.lang.String
    java.lang.Integer
    。无论您试图做什么,都不是这样做的。如果我将Test改为Test,Test改为Test,这不是关于引用类型的文档吗?这并不是说两个类是相同的,而是两个引用类型,比如
    private List myList
    中的
    myList
    类型。确保与
    private List myList
    中的不一样(添加
    private
    仅用于澄清,因此很明显这是定义一个字段,对于局部变量也是如此),感谢您的回答!类的类型参数是什么?如果类型对实现不重要,例如,
    List
    s不关心它们携带哪种类型的对象,那么它允许对某些类型不可知。我添加了一个链接,指向上面的
    通用类型
    描述。