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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张周飞 金牌黑马   /  2014-6-8 23:05  /  1487 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张周飞 于 2014-6-13 10:38 编辑

各位童鞋跪求...,碰到问题  求各位  给我解答一下下::{:3_52:}
            "=="和equals方法究竟有什么区别?

10 个回复

倒序浏览
“==”一般用来比较基本数据类型的变量值或对象的引用。而要比较类的里值是否相等用equals方法。equals方法对于类File、String、Date及包装类来说,比较的是值而不是内存地址

评分

参与人数 1黑马币 +3 收起 理由
张周飞 + 3 赞一个!

查看全部评分

回复 使用道具 举报 2 0
123_yaya 来自手机 中级黑马 2014-6-8 23:30:34
藤椅
提菩--空 发表于 2014-6-8 23:20
“==”一般用来比较基本数据类型的变量值或对象的引用。而要比较类的里值是否相等用equals方法。equals方法 ...

赞同。。。。
回复 使用道具 举报
==适用于基本数据类型,equals适用于对象,当==用于对象时比较的是变量指向的地址。
回复 使用道具 举报
“==”是看两个对象是否是同一个对象,equals()是比较两个对象的内容是否相等
回复 使用道具 举报

l

本帖最后由 阿布Yocan 于 2014-6-9 11:04 编辑

String a = new String("java");
String b = new String("java");

  这两条new语句创建了两个对象,a、b两个变量分别指向两个不同的对象,他们的首地址不同,即a、b两个变量存储的数值是不同的,所以表达式a == b 返回false;这两个对象的内容是相同的,所以表达式a.equals(b)返回true。
  要比较两个基本数据类型的数据或两个引用变量是否相等,只能用 == ,==操作符专门用来比较两个变量的值是否相等,也就是用于比较两个变量所对应内存中存储的数值是否相同
  equals方法比较两个独立的对象是否相同,就好比去比较两个人的长相是否相同,她比较的两个对象是独立的,记住,字符串的比较基本上用equals().
回复 使用道具 举报
我个人简单理解,"=="一般比较的是两个变量值内存中的地址是否相同,是不是同一个对象。而equals比较的是两个值是否相同,就跟“3=3”这样子。
回复 使用道具 举报
1、“==”是一个比较运算符;equals是由所有类的超类Object提供的一个方法;
2、使用范围:“==”可以用在基本数据类型、引用数据类型、字符串变量的比较;equals可以用在字符串变量和非字符串变量的比较(非字符串变量即这个变量指向的对象)
3、具体比较时的实现:==用在基本数据类型时,就是比较他们的值;用在引用数据类型,就是比较他们在内存中的首地址,即他们是不是同一个对象;用在字符串时,也是比较他们在内存中的地址(一般不建议用==比较字符串,因为,比如“a”和“a”是两个存在不同地址的两个字符串,用==比较返回false,但是实质两个字符串是相等的);“==”还可以用来比较两个类对象,如e.getClass()==Employee.class;
          equals方法在Object类中底层实现也是调用“==”运算符,即比较引用是否指向同一个对象,但是这个方法被很多类都重写;比如在String类中equals别重写成比较两个字符串中包含的内容是否一样,如String s = "abc";  "abc".equals(s);  返回true;值得注意的是,很多类都重写了Object类的equals方法,要深刻理解这个方法还要理解hashcode方法,这两个方法一般都保持“在一起”;另外关于比较还要深刻理解两个接口Comparator和Comparable

个人浅见,希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
①==和equals的实质。
       在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。
       基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。
       java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。
       其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。
       总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.或者说,,"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
       ②==操作符。专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相当,只能用==操作符。
      Java的基本数据类型为(char,byte,short,int,long,float,double,boolean)。
      如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(对内存),变量本身也占用一块内存,例如Object obj = new Object()变量obj是一个内存,new Object()是一个内存,此时,变量所对应的内存中存储的数据就是对象占用的那块内存的首地址。对于指向对象内存的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
==比较的事内存地址值,
equals比较的事实际内容
回复 使用道具 举报
equals()是判读两个Set是否相等 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马