String s1 = "a";
  String s2 = s1 + "b";
  String s3 = "a" + "b";
  System.out.println(s3 == s2); //打印FALSE
说明s3和s2指向不同的字符串对吗,不是说常量池中的字符串不会重复创建吗,这里不是重复创建了吗 

解决方案 »

  1.   

    无数次的问题!!!
      
       首先你要明白s3和s2通过==比的是地址。s2=s1+"b"。由于s1编译器不能确定其值会在heap中new一个新的对象付给s2。而s3,"a"+"b"在编译期就可以确定值了,编译器会进行优化直接把他们表示成"ab"存储到String Pool中。所以两个东西了,肯定不同的地址了。!
      

  2.   

    为了避免在这种问题上纠缠,凡是比较字符串都应该用 equals,禁止使用 == 。
      

  3.   

    字符串比较怎能用 == ?用 == 永远都会是false字符串比较应该用 a.equals(b);
      

  4.   

    字符串比较应该用 equals,但用==可不一定都是false