String 型对象有关问题

String 型对象问题
String a = "ab";
String b = "a" + "b";
System.out.println((a == b));
大家来判断最后一行的执行结果,并说明理由!
1 楼 liquidthinker 2007-09-17  
true
一个字解释:栈
2 楼 blackbat 2007-09-17  
还是没明白啊 楼上的可否说仔细点??
3 楼 bookong 2007-09-17  
字符串是常量;它们的值在创建之后不能改变。
他们都指向串池里的常量字符串
4 楼 ddandyy 2007-09-18  
研究这个很没意思的
实际中没什么用处
5 楼 jiyanliang 2007-11-29  
jiyanliang 写道
String a = "ab"; 
String b = "a" + "b"; 
System.out.println((a == b));

大家来判断最后一行的执行结果,并说明理由!

自己现在终于找到了答案。
String a = "ab";//这句代码在执行后,在string 池中创建了对象ab,而a则是指向这个对象的地址
当执行String b = "a" + "b"; 这条语句时,由于=号的右边都是常量字符串,所以在创建时将在String池中找构成后的对象ab("a" + "b"=>"ab"),这是发现对象池中有这个对象,这样就直接返回池中的对象地址给b,而不在堆中重新创建对象。
这里假如改一下:
String x = "b";
String a = "ab"; 
String b = "a" + x; 
System.out.println((a == b));

这时候的输出就为false;
这里要注意的几点是:
1、String池的概念
2、==比较对象的概念。用它比较对象时,永远只比较对象的地址。