Java .class==.class vs.class.toString()vs.class.toString()的值

Java .class==.class vs.class.toString()vs.class.toString()的值,java,class,Java,Class,我在玩Classname.class和Classname.class.toString时发现了一些不寻常的东西 在同一类上运行时,.class似乎等同于.class。尽管.class.toString不等同于同一类上的.class.toString。为什么会这样 请看下面我的代码 public class HelloWorld{ public static void main(String []args){ if(String.class.toString() == S

我在玩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方法。

因为您不使用==运算符来比较字符串。改为使用.equals方法。

为什么期望一个toString调用返回与第二个调用完全相同的对象?Object.toString和Class.toString都没有在Javadoc API文档中指定在连续调用中将返回相同的字符串对象


没有理由不这样做,我们必须假设默认约定字符串实例必须与equals进行比较。

为什么期望一个toString调用返回与第二个调用完全相同的对象?Object.toString和Class.toString都没有在Javadoc API文档中指定在连续调用中将返回相同的字符串对象


在没有其他理由的情况下,我们必须假设默认约定字符串实例必须与等于进行比较。

这里,您是在比较引用,而不是字符串内容,并且引用不等于

String.class.toString() == String.class.toString()
您必须与相等者进行比较:

String.class.toString().equals(String.class.toString())
或者您可以与字符串的高级功能进行比较,如下所示:

String.class.toString().intern() == String.class.toString().intern()

这里,您比较的是引用,而不是字符串内容,并且引用不相等

String.class.toString() == String.class.toString()
您必须与相等者进行比较:

String.class.toString().equals(String.class.toString())
或者您可以与字符串的高级功能进行比较,如下所示:

String.class.toString().intern() == String.class.toString().intern()

天哪!不知道我怎么会错过那个!天哪!不知道我怎么会错过那个!可能的重复可能的重复