日期:2014-05-20  浏览次数:20628 次

有点小意外
public class equalsTest {

private void methodTest(){
String A = "abc";
String B = "abc";
if(A==B){
System.out.println("A和B地址一样");
}


public static void main(String[] args) {
// TODO Auto-generated method stub
new equalsTest().methodTest();
}

}
结果打印出“A和B地址一样”。。。。。。是怎么回事呢?

------解决方案--------------------
A和B都是用字符串常量复制的,字符串常量的值在编译的时候 值就可以确定,因此在字符串常量池当中只维护一个字符串对象“abc”,然后A B都引用到“abc”

如果是String a="abc"; String b=new String("abc") 就不一样了
------解决方案--------------------
String A = "abc"时创建常量"abc",String B = "abc"时先到常量池中检测发现有常量abc,所以不会重新创建,B直接指向A的地址。。