• 安东
    2019-12-02
    String t = "hello";
    System.out.println(t.equals(new String("hello")));
    System.out.println(t == new String("hello"));
    System.out.println(t == "hello");
    老师请问 “hello” 和 new String("hello")等价嘛?
    equals比较value, == 比较 地址,String比较特殊,后面为什么输出不一样呢?
    展开

    作者回复:
    ==是比较引用指向的对象是不是同一个对象。String的特殊之处是有些JVM会对String做优化。如果没有优化,new String和另外的new String肯定是俩对象,地址肯定不一样。JVM做的优化就是在创建String对象之前找一下JVM的缓存里是否已经有这样一个字符串了。有就直接返回那个字符串。

    这样就造成一种在别的对象上不会发生的情况,new出来的String其实并不是真的new的,而是之前就已经存在的。这样,== new String 就会返回true。

     1
    
我们在线,来聊聊吧