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

关于字符串相加,比较
public class StringTest {


private static String a="abcdef";
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="abc"+"def";
String s2="abc";
String s3="def";
String s4="abcdef";
System.out.println(s1==a);
System.out.println(s1==s4);
System.out.println((s2+s3)==a);
System.out.println((s2+s3)==s4);
}
}


结果是什么:为什么

------解决方案--------------------
true
true
false
false
------解决方案--------------------
大概估計一下: 應該是true,true,false,false.
1.因為S1,a,S4都是指向堆棧中的“abcdef”,所以他們地址指向是一致的.所以前兩個為true。
2.s2和s3也是指向堆棧,但是他們合併時,會創建一個對象用來保存結果的,所以他們相加指向的並不是堆棧中的地址,而是內存當中的,所以後兩個為false。

------解决方案--------------------
true
true
true
true
你输出一下就知道了
------解决方案--------------------
探讨
大概估計一下: 應該是true,true,false,false.
1.因為S1,a,S4都是指向堆棧中的“abcdef”,所以他們地址指向是一致的.所以前兩個為true。
2.s2和s3也是指向堆棧,但是他們合併時,會創建一個對象用來保存結果的,所以他們相加指向的並不是堆棧中的地址,而是內存當中的,所以後兩個為false。

------解决方案--------------------
探讨
引用:
大概估計一下: 應該是true,true,false,false.
1.因為S1,a,S4都是指向堆棧中的“abcdef”,所以他們地址指向是一致的.所以前兩個為true。
2.s2和s3也是指向堆棧,但是他們合併時,會創建一個對象用來保存結果的,所以他們相加指向的並不是堆棧中的地址,而是內存當中的,所以後兩個為false。

up!up!……

------解决方案--------------------
探讨

Java code

Each string literal is a reference (§4.3) to an instance (§4.3.1, §12.5) of class String (§4.3.3). String objects have a constant value. String literals—or, more generally, strings that a……

------解决方案--------------------
"abcdef"是在串池中(堆中),S1 a S4 都是指向该处 ,故前两个是true
s2 s3 是分别指向堆中某处,各自利用串池中的 "abc" 和 "def"创建了一个对象
当 s2 + s3 时返回的是新建的一个对象, 该对象利用串池的"abcdef"创建对象
但和串池中的那个并不是同一个
故后两个都是false
------解决方案--------------------
全部为TRUE

这些应该叫编译时常量!运行前就已经被优化了!
------解决方案--------------------
探讨

全部为TRUE

这些应该叫编译时常量!运行前就已经被优化了!

------解决方案--------------------
操作符“+”会产生一个新的字符串:
详见帖子:
http://topic.csdn.net/u/20080415/12/3f2b9589-e97c-4129-8941-011bd9203a98.html
------解决方案--------------------
路过酱油.......
------解决方案--------------------
String类用到了不变模式,a、s1、s4都是"abcdefg",他们会指向同一个new ("abcdefg")对象
(s2+s3)是临时的变量
------解决方案--------------------
探讨

大概估計一下: 應該是true,true,false,false.
1.因為S1,a,S4都是指向堆棧中的“abcdef”,所以他們地址指向是一致的.所以前兩個為true。
2.s2和s3也是指向堆棧,但是他們合併時,會創建一個對象用來保存結果的,所以他們相加指向的並不是堆棧中的地址,而是內存當中的,所以後兩個為false。

------解决方案--------------------
老生常谈了 这是 培训机构 或者 笔试题 经常见到的吧
------解决方案--------------------
探讨
"abcdef"是在串池中(堆中),S1 a S4 都是指向该处 ,故前两个是true