黑马程序员技术交流社区
标题:
一个比较的问题
[打印本页]
作者:
袁劲松
时间:
2014-1-13 09:59
标题:
一个比较的问题
int a=10;
int b=10;
则a==b将是true。
String a=new String(foo);
String b=new String(foo);
则a==b将返回false。
这个原因是什么呢
作者:
xu6148152
时间:
2014-1-13 10:02
本帖最后由 xu6148152 于 2014-1-13 10:04 编辑
a,b是两个不同的对象,指向两片不同的内存区域。new运算符会在堆内存中开辟一个空间,用来存放对象的属性。
因此new String(a),new String(b),会在堆内存中开辟两个内存空间。
而a,b分别指向各自的内存空间地址。
作者:
长石
时间:
2014-1-13 10:16
==比较的是变量值,就是引用地址
而new是开辟新空间 所以地址不同
这里要用equals比较
作者:
高丽华
时间:
2014-1-13 11:08
==号,他比较的是一个对象在内存中的地址值,
比如2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
作者:
悟中生有
时间:
2014-1-13 11:37
你new了两个对象,在内存里就会有两个地址值,任何对象的地址值在内存中都是唯一的。所以比较结果就是false了。
作者:
app297
时间:
2014-1-14 12:17
对的, new了2个对象,所以返回是alse, == 是比较内存地址,而且String 和 基本数据类型不一样。 String是不能改变的。只是引用地址改变而已
作者:
倉促、尋找你
时间:
2014-1-15 21:23
你不了解的JVM的工作机制,对象表示符就如C里边的指针,只是相当于对象数据的地址而已,不是对象的值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2