public class fourtest {
public static final String i = "b"; public static void main(String args[]) {
String b = "ab";
String a = "a" + i;
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
输出 true, ture。  这个结果是编译器优化的结果。public class fourtest {
public static final String i = null; public static void main(String args[]) {
String b = "anull";
String a = "a" + i;
System.out.println(a == b);
System.out.println(a.equals(b));
}
}输出 false ,true。 这个时候为啥不是true,true。 

解决方案 »

  1.   

    前者中的"a" + i是合成一个“ab”字符串,然后在字符串常量池里找是否有“ab”,如果有,直接把地址赋予它。因此,用==比较地址是相等的。
    后者"a" + i中的i是null,强制类型转换后,它被当成一个对象放入堆中,因此地址不同。仅仅是个人见解,还请各位指教。
      

  2.   

    http://topic.csdn.net/u/20120607/07/9d3a5948-ca38-4eb9-a4f8-63400b34e13a.html不多说,不解释
      

  3.   

    不用多说,看看这个:
    http://blog.csdn.net/chenshuang_com/article/details/7743296