当前位置: 代码迷 >> J2SE >> 有点小意外,该怎么处理
  详细解决方案

有点小意外,该怎么处理

热度:108   发布时间:2016-04-24 12:14:02.0
有点小意外
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的地址。。
  相关解决方案