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

地址池问题?
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引用的是两个不同的对象,它们不是用字符串常量赋值的,所以不会出现地址相同的情况。
我猜,楼主是因为
Java code

   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
------解决方案--------------------
字符串得运算都是在堆中进行得,所以是两个不同得地址
但他们得值都是指向字符串常量池中,所以他们得值是相同得
==是比较他们得内存地址得