返回列表 发帖

[基本语法] ==与equals()

  1. String a = "ab";
  2. String b = "a" + "b";
  3. System.out.println(a==b);
  4. true or false?
复制代码
==是用来比较两个字符串是否引用同一个对像,equals是比较字符串是否相同的  ,
上面的 a 和 b 最后输出的是true ,但是我搞明白  谁能帮忙解释一下为什么!
a和b不是应该是两个不同的对象吗?

提问赏金:5金币
获奖名单 : annie(5金币)    

String 的引号" "赋值方式JAVA只在中建立字符串,而的字符串是不重复建立的,也就是当你再建立String b 时,JAVA会先查看栈中有无"ab",如果有,把这个地址给b,如果没有才新建立一个. 所以你现在 b和 a 的地址是一样的,输出 true

[ 本帖最后由 annie 于 2010-2-10 21:08 编辑 ]
1

评分人数

  • heyitang

TOP

在解释之前,先把行动做好。

TOP

TOP

ok, Annie  ,那我还有一个搞不懂的,你帮忙看一下,
  1. String str1 = "fly";
  2. String str2 = "weight";
  3. String str3 = "flyweight";
  4. String str4 = null;
  5.                
  6. str4 = str1 + str2 ;
  7. System.out.println(str3==str4);
复制代码
那这个为什么输出的是false,如果照你所说,在建立新的flyweight的时候,它应该先去找是否有 flyweight 存在 ,这我就搞不懂了,帮忙解释一下,谢谢了啊!!!

TOP

你仔细看2楼的解释,我把关键部分加亮了

str4 = str1 + str2 ;不是引号" "赋值方式, ,它创建出来的str4是在区,不在栈区了,而str3 在区,所以它们的地址不一样了,输出false

只有str4 = "fly"+"weight"; 是引号" "赋值方式,输出true
str4 = str1+ "weight";  str4 = "fly"+ str2; str1 = str1 + str2; 都不是, 输出false

[ 本帖最后由 annie 于 2010-2-10 21:13 编辑 ]

TOP

嘿嘿 , 我是 堆和 栈 这个概念没有搞清楚啊,谢谢Annie的指导 啊, 我有时间把这两个概念好好看看,

TOP

Don't give me any chance!
身挑一狙,独行天下!

TOP

在解释之前,先把行动做好。

TOP

TOP

返回列表