第一个是true其余的都是false。
== 你去查看下java.lang.object类的equals方法,==是比较内存地址是否相同,或者比较基本类型的值是否相同,比如:
1 == 1比较的是2个基本类型的值
对象1 == 对象2 比较是2个对象在内存中的地址的引用是否是同一个,说白了就是比较是否引用了相同对象,即是否是同一个对象。说这个可以延伸到更深层次,呵呵慢慢研究吧,你可以关注下hashcode 和equals方法对于这个的延伸

解决方案 »

  1.   

    这个测试的是JVM对字符串的管理了。
    想知道结果,读JVM源码比较好。想通过测试的方式来猜测实现,比较难。
      

  2.   

    true
    false
    false第一个true的原因是:first和second都会放在jvm的常量区,而且重复定义的常量会合并为一个,所以,first和second指向的地址相同。
    第二个和第三个false的原因是:他们都分别指向各自的放在堆区里的不同对象,所以==判断是不同的。
      

  3.   

    比较好的理解方式便是研究一下JVM;看一下内存中对字符串的处理,如堆栈的引用,运行时常量池的使用;
      

  4.   


    先说理论: 用'String X = "X" ;方式 声明先去找字符常量池有没有这个引用,有的话就直接给引用地址给栈里的字面值X;
                    用NEW 方式声明则不会去找,直接在堆内存NEW类.把新建的类的引用地址给栈里的字面值X;
             String first = "Phone:" + "55555"; 
             String second = "Phone:" + 55555; //true,找了字符常量池,所以为真
             String third = new String("Phone:") + new String("55555"); //false,new 方式没找字符常量池,所以为假
             String fourth = new String("Phone:") + 55555; //false,new 方式,没找字符常量池,所以为假