zg18434886024 2018-10-30 14:23 采纳率: 50%
浏览 500
已采纳

下面关于String的测试,哪位大神能给出解答?

 public class StringDemo {
    String s1 = "123";
    String s2 = "12" + "3";
    String ss1 = "12";
    String ss2 = "3";
    String ss3 = ss1 + ss2;

    public void main() {
        System.out.println(s1 == s2);//true
        System.out.println(s1 == (ss1 + ss2));//false
        System.out.println(s1 == ss3);//false
    }

    public static void main(String[] args) {
        StringDemo sd = new StringDemo();
        sd.main();
    }
}

  • 写回答

5条回答

  • threenewbee 2018-10-30 16:07
    关注

    java编译器有优化,String s2 = "12" + "3";,因为都是常量,所以s2可以在编译的时候算出是"123",而程序中字符串常量会放在常量池里,相同的常量只需要一个拷贝,所以s1 == s2
    s1 == (ss1 + ss2),其中ss1+ss2是运行时候才计算,并不能放在常量表里。
    ss3是一样的道理,它虽然理论上也可以被求值出来,但是java编译器并没有做那样深度的优化,两个变量(变量本身指向常量)的计算,还是运行时才计算的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?