这种问题论坛尚明有很多了,你可以找一下,再给你解释一下        String s = "hello";//变量在constant pool
        String s1 = "hel";//变量在constant pool
        String s2 = "lo";//变量\在constant pool
        System.out.println(s == s1 +s2);//(s1 +s2) 在 heap(栈)里面,
        System.out.println(s =="hel"+"lo" );//"hel"+"lo" 在constant pool 

解决方案 »

  1.   

    https://code.csdn.net/haorengoodman?tab=2#snippets17
    可以先看例子,再结合注释理解一下
      

  2.   

    又是String这个东西,深入理解的话可以从堆栈和常量池去理解;
      

  3.   

    https://code.csdn.net/snippets/255108
    上面的链接给的不是很准确,这个是准确连接,可以直接看下面的几个例子,结合注释理解
      

  4.   

    第一个等价于
    String ss = s1 + s2;
    System.out.println(s == ss);此时s和ss指向不同内存地址,字符串用==比较是比较对象的内存地址是否一致,返回false第二个等价于
    String sss = "hel"+"lo";
    System.out.println(s == sss);
    sss从字符串池查找hel 和 lo,有不开辟新的内存空间,使用已经有的,即sss最终指向s,==判断内存地址,相同即返回true
      

  5.   

    你要是会debug,就可以跟到java源码中就可以很清楚的看的为什么一个是false一个是true了