我在玩Classname.class和Classname.class.toString()时发现了一些不寻常的东西。
当在同一个类上运行时,.class似乎等同于.class。虽然.class.toString() 并不等同于同一个类上的.class.toString()。为什么这会是。
请看下面的代码
public class HelloWorld{
public static void main(String []args){
if(String.class.toString() == String.class.toString())
System.out.println("toString(): Yes they are the same");
else
System.out.println("toString(): They are not the same ?");
System.out.println("=============================");
if(String.class == String.class)
System.out.println(".class: Yes they are the same");
else
System.out.println(".class: They are not the same");
}
}
输出:
sh-4.3# javac HelloWorld.java
sh-4.3# java -Xmx128M -Xms16M HelloWorld
toString(): They are not the same ?
=============================
.class: Yes they are the same
发布于 2015-06-30 19:22:50
因为您不使用==运算符来比较字符串。使用.equals()方法代替。
发布于 2015-06-30 19:23:41
为什么您期望一个toString()
调用会返回与第二个调用完全相同的对象?Object.toString()
和Class.toString()
都没有在它们的Javadoc文档中指定在后续调用中将返回相同的String
对象。
如果没有其他理由,就必须假定String
实例必须与equals()
进行比较这一默认约定。
发布于 2015-06-30 20:16:32
在这里,您比较的是引用,而不是字符串内容,并且引用不是相等的。
String.class.toString() == String.class.toString()
您必须与等价者进行比较:
String.class.toString().equals(String.class.toString())
也可以将其与字符串的高级特性进行比较,如下所示:
String.class.toString().intern() == String.class.toString().intern()
https://stackoverflow.com/questions/31146673
复制相似问题