String 型对象有关问题
String 型对象问题
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,而不在堆中重新创建对象。
这里假如改一下:
这时候的输出就为false;
这里要注意的几点是:
1、String池的概念
2、==比较对象的概念。用它比较对象时,永远只比较对象的地址。
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、==比较对象的概念。用它比较对象时,永远只比较对象的地址。