黑马程序员技术交流社区

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

作者: 来明坤    时间: 2012-7-4 15:50
标题: "=="和equals方法究竟有什么区别?
本帖最后由 来明坤 于 2012-7-4 16:26 编辑

小马求教
作者: 刘笑    时间: 2012-7-4 15:52
本网站有关这个问题的帖子至少有十个,楼主可以看看前人是怎么回答的
作者: 王健    时间: 2012-7-4 15:52
这个问题已经被问烂了,,百度和论坛上一搜一把,,楼主搜一下吧
作者: 田向向    时间: 2012-7-4 15:59
这个题都快被问烂了,度娘那里能找到你想要的答案,
我简答总结一下:
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容
举个例子:
int a1=1;
int a2=1;
Integer b1 =new Integer (1);
Integer b2 =new Integer (1);
------------------------------
a1==a2 这个是成立的,很简单,都知道
a1==b1 这个是不成立的.表达式的值为 false ,它们是不同的数据类型(在jdk1.5以上版本中为true)
b1==b2 这个也是不成立的.表达式的值为 false,虽然是相同的数据类型,但是它们是两个对象,==比较的是2个对象的地址,它们的地址是不相等的,内容相等都是1;
b1.equals(b2)==true 这个是成立的,表达式的值为 true. 相同数据类型,两个对象,地址不同,内容相同, equals比较的是2个对象的内容,所以成立。
(a.equals(b),因为equals比较的是两个对象,所以a,b都不能为基本数据类型,否则会出编译错误。)
总结来说:在JAVA中:==比较的是2个对象的地址,而equals比较的是2个对象的内容

我也是菜鸟,求共同进步。
作者: 胡大强    时间: 2012-7-4 16:09
简单的说。。equals比较的是内容。。。
==比较的是值的引用。即内存地址。
String s1=new String("java");s1.equals("java"),返回true
String s2="java"; s1==s2;返回false;

另外,也要区分两种创建对象的方式。


作者: 赵倩倩    时间: 2012-7-4 16:10
真的是看了好多个了  ==比较的内存中的地址值  而equal比较的是内存地址中的内容
作者: 程有愿    时间: 2012-7-4 16:12
java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
  他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
作者: 陆强强    时间: 2012-7-4 16:15
除了字符串因为帮你复写好了equals,所以比较的是内容,其他地方如果你自己不复写equals,那和==没区别都是比较内存地址




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