繁体   English   中英

.class == .class与.class.toString()与.class.toString()

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM