黑马程序员技术交流社区

标题: "=="和equals方法究竟有什么区别? [打印本页]

作者: heheka123    时间: 2014-4-20 11:51
标题: "=="和equals方法究竟有什么区别?
==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则a==b将是true。
但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b将返回false。
这是什么原因???
作者: 孙旌棋    时间: 2014-4-20 11:56
equals方法比较的是两个对象是不是同一对象, ==比较的是对象在"栈"内存中的引用地址, String a=new String("foo");  String b=new String("foo"); 这里实际上是new出来了两个对象, 那么他们的地址值肯定是不会相同的.
作者: anqi    时间: 2014-4-20 11:56
本帖最后由 anqi 于 2014-4-20 12:04 编辑

==在比较非基本数据类型,也就是对象的时候,是比较内存其地址值的
String a=new String("foo");
String b=new String("foo");
上面的语句new了3个对象,一个是a指向的堆内存 ,一个是b指向的堆内存(new的含义就是在堆内存中分配一片空间)
所以a和b的地址值不同。则a==b将返回false。
而“foo"有自身的保存位置,它在常量池中,不论你建立多少个都只要是“foo"就会是那一个。
String a="foo";    String b="foo"; 这样a==b就是true了因为内存的地址值是一个。
至于equals  它是对象继承自Objec类的方法,我们可以复写这个方法。建立我们自己的判断条件。
String类也复写了这个方法,它比较的是a和b 的内容。所以a.equals(b) 返回的是ture

作者: 孙旌棋    时间: 2014-4-20 12:04
如果是用equals判断的话结果是true,因为它们是一个对象

BaiduShurufa_2014-4-20_12-3-1.png (93.33 KB, 下载次数: 50)

BaiduShurufa_2014-4-20_12-3-1.png

作者: 悠然丶    时间: 2014-4-20 12:13
==比较基本数据类型,就是看值是否相等,这个应该都理解
==在比较非基本数据类型,也就是引用数据类型的时候,是比较内存其地址值是否相等

equals方法是Object中的方法,默认也是比较2个对象的地址值的,所有的自定义类在没有声明的情况下
都是都继承了Object,所以也是比较地址值.   如果你想比较内容,就要在自定义的类中重写equals方法即可
<回答完毕>!

作者: 雪碧拌米饭    时间: 2014-4-20 12:25
equals 只是比较值是否相同 , ==是比较两个对像的值是否指向同一地址空间 在java中,每定义一个变量都给其分配一个内存空间 String a="foo";  String b="foo"; 用==和equals比较都能得到正确的结果,因为a和b指向了同一内存空间. String a=new String("foo");  String b=new String("foo");  用==去做比较会得到false。b赋值时又新定义了一个内存空间  这时候就只能用equals;
作者: idream    时间: 2014-4-20 21:06
区别:
        1,==号是一个比较运算符,equals是一个方法
        2,==号既可以比较基本数据类型,也可以比较引用数据类型,equals方法只能比较引用数据类型
        3,如果某个类没有重写Object这个类中的equals方法,那么比较引用数据类型,==号和equals方法是一样的结果,    如果重写Object这个类的equals方法,都是比较的是内容,比如说两个人比较,就不再比较他们的地址值,而是比较他们的姓名,年龄




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2