String的常量池,==与equals的比较

String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));为什么str.equals(str2) 为true??真的搞不懂

10个回答

new了就重新分配地址了,所以str1==str2返回false. equals没什么好说的,就是比较内容是否相同,都是abc,所以为true.

==比较的是两个引用类型指向的地址是否相同,equals比较的是两个引用类型指向地址的内容是否相同。
new String新建对象,所以地址必然不同。而你存放的内容都是“abc”,所以内容相同。

这是底层JVM的知识,可以反编译下这段代码的机器码,可能会更容易理解一些。反编译内容如下:
图片说明
Java中所有的new操作都是在堆内存中新建立对象,而equals则是按一定规则实现的用于判断具有可比对象之间在某种含义上的相等。而==则纯粹是对象指针为同一个。

==比较的是地址,即两个字符串指针变量是否指向同一块内存区域。 但是equals,比较的是两个字符串的内容。

== 是判断地址,equas 是判断value。

str和str2的值相同,肯定返回true呀,str和str2的地址又不相同

建议看看这篇文章,其实很多人都理解错了http://blog.csdn.net/u013064109/article/details/52878345

== 是判断地址,equas 是判断value

楼主,这些问题网上都有答案的!!!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问