黑马程序员技术交流社区

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

作者: 张周飞    时间: 2014-6-8 23:05
标题: "=="和equals方法究竟有什么区别?
本帖最后由 张周飞 于 2014-6-13 10:38 编辑

各位童鞋跪求...,碰到问题  求各位  给我解答一下下::{:3_52:}
            "=="和equals方法究竟有什么区别?
作者: 提菩--空    时间: 2014-6-8 23:20
“==”一般用来比较基本数据类型的变量值或对象的引用。而要比较类的里值是否相等用equals方法。equals方法对于类File、String、Date及包装类来说,比较的是值而不是内存地址
作者: 123_yaya    时间: 2014-6-8 23:30
提菩--空 发表于 2014-6-8 23:20
“==”一般用来比较基本数据类型的变量值或对象的引用。而要比较类的里值是否相等用equals方法。equals方法 ...

赞同。。。。
作者: IStudying    时间: 2014-6-9 10:21
==适用于基本数据类型,equals适用于对象,当==用于对象时比较的是变量指向的地址。
作者: pengyu    时间: 2014-6-9 10:25
“==”是看两个对象是否是同一个对象,equals()是比较两个对象的内容是否相等
作者: 阿布Yocan    时间: 2014-6-9 10:54
标题: 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().

作者: 酸奶小哥    时间: 2014-6-9 11:09
我个人简单理解,"=="一般比较的是两个变量值内存中的地址是否相同,是不是同一个对象。而equals比较的是两个值是否相同,就跟“3=3”这样子。
作者: 寐海流风    时间: 2014-6-9 11:21
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

个人浅见,希望对你有帮助。
作者: zly1992008    时间: 2014-6-9 11:33
①==和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()是一个内存,此时,变量所对应的内存中存储的数据就是对象占用的那块内存的首地址。对于指向对象内存的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
作者: 杨胜男    时间: 2014-6-9 12:18
==比较的事内存地址值,
equals比较的事实际内容
作者: TS__likewise    时间: 2014-6-9 12:32
equals()是判读两个Set是否相等 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值




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