发新提问
打印

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

==与equals()

复制内容到剪贴板
代码:
String a = "ab";
String b = "a" + "b";
System.out.println(a==b);
true or false?
==是用来比较两个字符串是否引用同一个对像,equals是比较字符串是否相同的  ,
上面的 a 和 b 最后输出的是true ,但是我搞明白  谁能帮忙解释一下为什么!
a和b不是应该是两个不同的对象吗?
赏金: 5 疯狂金币     剩余: 0 疯狂金币     已结贴
获得赏金用户:
annie: 5疯狂金币    

TOP

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

[ 本帖最后由 annie 于 2010-2-10 21:08 编辑 ]
本帖最近评分记录
  • heyitang 疯狂金币 +10 热心会员 2010-2-11 16:12

TOP

哈哈,Java发挥了勤俭节约的精神~
当我想笑的时候,我会做一件事情...那就是,笑...

TOP

挖挖,木头同学,你干什么坏事去了,很久没看你冒泡了

不打算搞JAVA啦?

TOP

ok, Annie  ,那我还有一个搞不懂的,你帮忙看一下,
复制内容到剪贴板
代码:
String str1 = "fly";
String str2 = "weight";
String str3 = "flyweight";
String str4 = null;
               
str4 = str1 + str2 ;
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

回复 4# annie 的帖子

以开学和课程为借口...进度停止了,所以我不敢冒泡...
当我想笑的时候,我会做一件事情...那就是,笑...

TOP

再以找工作为借口,你的进度就不会停止了

TOP

发新提问
版块跳转  最近访问的版块