Java 编译时的引用类型相等
我在Java语言规范-8中遇到了以下语句。它指出,在编译时两个类是相同的,如果:Java 编译时的引用类型相等,java,reference,Java,Reference,我在Java语言规范-8中遇到了以下语句。它指出,在编译时两个类是相同的,如果: 它们具有相同的二进制名称(外部类的规范名称) 它们的类型参数相同(如果有) 但为什么编译器会为其引发重复的类错误呢 class Test<String>{ ... } class Test<Integer>{ ... } 类测试{ ... } 课堂测试{ ... } 这里的二进制名称相同,但参数类型不同。这里缺少什么?它不是参数,而是泛型类的参数。此类型信息在运行时被
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不关心它们携带哪种类型的对象,那么它允许对某些类型不可知。我添加了一个链接,指向上面的通用类型描述。