黑马程序员技术交流社区
标题:
equals与“==”的区别?
[打印本页]
作者:
董玲飞
时间:
2014-3-3 15:04
标题:
equals与“==”的区别?
写代码时经常会碰到用equals或“==”或instanceof来进行判断,返回类型都是boolean型,那有什么区别呢?
作者:
Amorvos
时间:
2014-3-3 16:17
equal方法本身是Object中存在的方法,Object中将其定义的方法就是==,因此一个类,在你不重写equal方法时的效果与==是一样的。
==本身比较的是变量引用的地址,而不是比较具体内容,也就是说,相同内容变量如果new两次,通过==得到的将是false。
instanceof比较的是实例的类属性,也就是说是否是该类的实例,是否是该类的子类的实例。
PS:
我不知道这是第几次看到这个问题,其实你可以学着使用站内搜索,你会得到你想要的答案。
作者:
菠萝鱼
时间:
2014-3-3 16:18
楼上正解
作者:
董玲飞
时间:
2014-3-3 16:20
Amorvos 发表于 2014-3-3 16:17
equal方法本身是Object中存在的方法,Object中将其定义的方法就是==,因此一个类,在你不重写equal方法时 ...
好的,谢谢!
作者:
黄翔
时间:
2014-3-3 17:19
equals方法用于检测一个对象是否等于另外一个对象。在Objecet类中,这个方法判断的是两个对象是否具有相同的引用。因为Object是所有类的基类,所以子类中定义equals方法时,首先带调用超类的equals,如果检测失败,对象就不可能相等。如果超类中检测相等,就需要比较子类中的实例域。
==进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
作者:
行如止水
时间:
2014-3-3 17:22
equals用对应的方法比较;
==是比较两个对象的地址;
作者:
天凌蓝
时间:
2014-3-3 18:09
如果你要用equals来比较两个对象的属性值是否相同,需要在你的类中覆写equals方法,因为你的类默认会继承Object类的equals方法,而Object类的equals方法是比较对象之间的引用地址值是否相同,相当于“==”的用法,在java中除了一些比较特殊的类,像String类一样有覆写Object类方法外,其他一些类继承后是没有覆写的。
至于“==”就是比较引用类型,比如对象之间的引用地址值是否相同。
而instanceof是判断对象是不是某一个类的实例,或者是该类的子类对象。
希望这答案能给你有帮助。
作者:
osully
时间:
2014-3-3 21:02
给你一个我之前 帮助自己理解的Demo
public class EqualsDemo {
public static void main(String[] args) {
String s1 = "123";
String s2 = "123";
String s3 = s1;
String s4 = new String("123");
String s5 = new String(s1);
sop(s1==s2);
sop(s1==s3);
sop(s1==s4);
sop(s1==s5);
sop(s1.equals(s2));
sop(s1.equals(s3));
sop(s1.equals(s4));
sop(s1.equals(s5));
}
public static void sop(Object obj){
System.out.println(obj);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2