首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

地址池有关问题

2012-09-08 
地址池问题?public static void main(String[] args) {String s1mString s2nString s3s1+s2Stri

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

热点排行