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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董玲飞 中级黑马   /  2014-3-3 15:04  /  888 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写代码时经常会碰到用equals或“==”或instanceof来进行判断,返回类型都是boolean型,那有什么区别呢?

评分

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

查看全部评分

7 个回复

倒序浏览

equal方法本身是Object中存在的方法,Object中将其定义的方法就是==,因此一个类,在你不重写equal方法时的效果与==是一样的。
==本身比较的是变量引用的地址,而不是比较具体内容,也就是说,相同内容变量如果new两次,通过==得到的将是false。
instanceof比较的是实例的类属性,也就是说是否是该类的实例,是否是该类的子类的实例。
PS:
      我不知道这是第几次看到这个问题,其实你可以学着使用站内搜索,你会得到你想要的答案。

评分

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

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
Amorvos 发表于 2014-3-3 16:17
equal方法本身是Object中存在的方法,Object中将其定义的方法就是==,因此一个类,在你不重写equal方法时 ...

好的,谢谢!
回复 使用道具 举报
equals方法用于检测一个对象是否等于另外一个对象。在Objecet类中,这个方法判断的是两个对象是否具有相同的引用。因为Object是所有类的基类,所以子类中定义equals方法时,首先带调用超类的equals,如果检测失败,对象就不可能相等。如果超类中检测相等,就需要比较子类中的实例域。

==进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

评分

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

查看全部评分

回复 使用道具 举报
equals用对应的方法比较;
==是比较两个对象的地址;
回复 使用道具 举报
如果你要用equals来比较两个对象的属性值是否相同,需要在你的类中覆写equals方法,因为你的类默认会继承Object类的equals方法,而Object类的equals方法是比较对象之间的引用地址值是否相同,相当于“==”的用法,在java中除了一些比较特殊的类,像String类一样有覆写Object类方法外,其他一些类继承后是没有覆写的。
至于“==”就是比较引用类型,比如对象之间的引用地址值是否相同。
而instanceof是判断对象是不是某一个类的实例,或者是该类的子类对象。

希望这答案能给你有帮助。

评分

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

查看全部评分

回复 使用道具 举报
给你一个我之前 帮助自己理解的Demo

  1. public class EqualsDemo {
  2.         public static void main(String[] args) {
  3.                 String s1 = "123";
  4.                 String s2 = "123";
  5.                 String s3 = s1;
  6.                 String s4 = new String("123");
  7.                 String s5 = new String(s1);
  8.                 sop(s1==s2);
  9.                 sop(s1==s3);
  10.                 sop(s1==s4);
  11.                 sop(s1==s5);
  12.                 sop(s1.equals(s2));
  13.                 sop(s1.equals(s3));
  14.                 sop(s1.equals(s4));
  15.                 sop(s1.equals(s5));       
  16.         }
  17.         public static void sop(Object obj){
  18.                 System.out.println(obj);
  19.         }
  20. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马