地址池问题?
public static void main(String[] args) {
String s1="m";
String s2="n";
String s3=s1+s2;
String s4=s1+s2;
System.out.println(s3==s4);
System.out.println(s3);
System.out.println(s4);
}
上述程序,为何System.out.println(s3==s4); 运行是false.这两个字符串的地址一是一样的?
[解决办法]
==比较的是内存地址,s3和 s4是两个不同的对象,所以地址也不同!
[解决办法]
s3 s4是不同的引用,保存着不同的地址,用==比较当然不一样
[解决办法]
s3和s4引用的是两个不同的对象,它们不是用字符串常量赋值的,所以不会出现地址相同的情况。
我猜,楼主是因为
String s1="m"; String s2="m";
[解决办法]
System.out.println(s3.equals(s4));
楼主可以试试这个
运行是true
[解决办法]
s3 , s4是指向两个不同的地址
String s3=(s1+s2).intern();
String s4=(s1+s2).intern();
System.out.println(s3==s4); //则是true
看看http://topic.csdn.net/u/20090519/18/7b8cf7ef-bc06-4d26-8a2c-692eb0562231.html
[解决办法]
字符串得运算都是在堆中进行得,所以是两个不同得地址
但他们得值都是指向字符串常量池中,所以他们得值是相同得
==是比较他们得内存地址得