A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王维波 黑马帝   /  2011-11-4 10:45  /  2074 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

"=="和equals方法究竟有什么区别?
我真的迷糊了。求解答。

该贴已经同步到 保持常态0616的微博

评分

参与人数 1黑马币 +3 收起 理由
admin + 3

查看全部评分

9 个回复

倒序浏览
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是
否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆
内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内
存,此时,变量obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的
变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这
时候就需要用==操作符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较
的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");

评分

参与人数 1技术分 +2 黑马币 +2 收起 理由
admin + 2 + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 齐国峰 于 2011-11-4 10:56 编辑

基本数据类型没有区别,
但是如果是对象(引用数据类型)的话==比较的是地址,
equals的话是先看这个类自己有没有equals方法,没有就调用父类的方法.
一般是比较值.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 lyc 于 2011-11-4 10:59 编辑

简单的讲,“==”是比较两个对象引用是否指向同一个对象或者基本数据类型的值是否相同,而equals是比较两个对象的内容是否相同!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
当使用==来判断两个内存是否相等时,如果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 10:55
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是
否相同,要 ...

谢谢,你讲的很详细
回复 使用道具 举报
王维波 黑马帝 2011-11-4 12:03:12
7#
齐国峰 发表于 2011-11-4 10:55
基本数据类型没有区别,
但是如果是对象(引用数据类型)的话==比较的是地址,
equals的话是先看这个类自己有没 ...

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

谢谢你  
回复 使用道具 举报
史晓霞 黑马帝 2011-11-4 21:39:05
9#
==是对基本类型的变量的比较,而equals是对对象的比较,特别用于String的比较
回复 使用道具 举报
张翼 黑马帝 2011-11-7 19:52:33
10#
==比较的是地址,而equals,比较的是内容;
在Java中,内容相同不代表就是地址相同,比较的前提是对象中存在内容,也就是对象被实例化,当两个内容相同的对象,被实例化的地址是不同的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马