黑马程序员技术交流社区

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

作者: 王维波    时间: 2011-11-4 10:45
标题: "=="和equals方法究竟有什么区别?
"=="和equals方法究竟有什么区别?
我真的迷糊了。求解答。

该贴已经同步到 保持常态0616的微博
作者: 姚志华    时间: 2011-11-4 10:55
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是
否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆
内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内
存,此时,变量obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的
变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这
时候就需要用==操作符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较
的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");

作者: 齐国峰    时间: 2011-11-4 10:55
本帖最后由 齐国峰 于 2011-11-4 10:56 编辑

基本数据类型没有区别,
但是如果是对象(引用数据类型)的话==比较的是地址,
equals的话是先看这个类自己有没有equals方法,没有就调用父类的方法.
一般是比较值.
作者: 刘永昌    时间: 2011-11-4 10:56
本帖最后由 lyc 于 2011-11-4 10:59 编辑

简单的讲,“==”是比较两个对象引用是否指向同一个对象或者基本数据类型的值是否相同,而equals是比较两个对象的内容是否相同!
作者: 喻尚健    时间: 2011-11-4 11:07
当使用==来判断两个内存是否相等时,如果2个变量是基本类型的变量,且都是数值型(不一定要求数据类型严格形同),则只要两个变量的值相等,使用==判断就将返回true;
但对于两个引用类型的变量,必须它们指向同一个对象时,==判断才会返回true。
int it==65;
float f1=65.0f;
it==f1;//返回true
String str1=new String("hello");
String str2=new String("hello");
str1==str2;//返回false
使用equals方法的话,只要两个变量引用对象里包含的数据相等,就认为这两个变量相等。
str1.equals(str2)//返回true
而且equals方法是可以重写的。如果写成这样
public boolean equals(Object obj){return};
任意对象调用这个方法返回的都是true.
所以重写equals方法就是提供自定义的相等标准,你认为怎么是相等,那就怎样是相等。
  
作者: 王维波    时间: 2011-11-4 12:02
姚志华 发表于 2011-11-4 10:55
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是
否相同,要 ...

谢谢,你讲的很详细
作者: 王维波    时间: 2011-11-4 12:03
齐国峰 发表于 2011-11-4 10:55
基本数据类型没有区别,
但是如果是对象(引用数据类型)的话==比较的是地址,
equals的话是先看这个类自己有没 ...

谢谢,多多指教
作者: 王维波    时间: 2011-11-4 12:03
风之末端 发表于 2011-11-4 11:07
当使用==来判断两个内存是否相等时,如果2个变量是基本类型的变量,且都是数值型(不一定要求数据类型严格 ...

谢谢你  
作者: 史晓霞    时间: 2011-11-4 21:39
==是对基本类型的变量的比较,而equals是对对象的比较,特别用于String的比较
作者: 张翼    时间: 2011-11-7 19:52
==比较的是地址,而equals,比较的是内容;
在Java中,内容相同不代表就是地址相同,比较的前提是对象中存在内容,也就是对象被实例化,当两个内容相同的对象,被实例化的地址是不同的。




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