[英].class == .class vs .class.toString() vs .class.toString()
我在玩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
因为您不使用==运算符来比较字符串。 请改用.equals()方法。
您为什么期望一次toString()
调用将返回与第二次调用完全相同的对象? Object.toString()
和Class.toString()
在其Javadoc API文档中指定在连续调用中将返回相同的String
对象。
没有其他理由,必须假定默认约定,即必须将String
实例与equals()
。
在这里,您正在比较引用,而不是字符串内容,并且引用不等于。
String.class.toString() == String.class.toString()
您必须与等于进行比较:
String.class.toString().equals(String.class.toString())
或者您可以将其与字符串的高级功能进行比较,如下所示:
String.class.toString().intern() == String.class.toString().intern()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.