黑马程序员技术交流社区
标题:
"=="和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)
下载附件
2014-4-20 12:03 上传
作者:
悠然丶
时间:
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