黑马程序员技术交流社区

标题: instanceof 关键字 与 ==疑问 [打印本页]

作者: 赵彦丰    时间: 2014-3-25 10:39
标题: instanceof 关键字 与 ==疑问
看毕老师视频得时候 看到了个关键字不明白 instanceof   百度了下 觉得跟  == 不是一样么  。这里能用 ==么

  1. public boolean equals(Object obj)
  2.         {
  3.                 if(!(obj instanceof Person))//这里比较
  4.                         return false;
  5.                 Person p = (Person)obj;
  6.                 System.out.println(this.name+"----"+p.name);
  7.                
  8.                 return this.name.equals(p.name)&&this.age == p.age;
  9.         }
复制代码



       


作者: 蓝枫    时间: 2014-3-25 10:55
instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
==其实是比较两个对象的内存地址
而equals方法是比较两个对象是否内容相等。

作者: trhthyj    时间: 2014-3-25 12:43
==是比较运算符,用于比较两个对等的事物(个人观点),instanceof适用于判断一个对象是否是某个类的实例,也即判断对象是否属于某个类,对象与类之间是之间是所属关系。
作者: 追逐    时间: 2014-3-25 13:22
不一样的。==是一个运算符
而instanceof则是判断某个类是不是属于某个类
如  public void void(Object obj)
   if(obj instanceof  Student)
的意思你可以理解为被传进来的obj类是否是Student类
作者: 橸瑩膤漃寞林    时间: 2014-3-25 13:48
instanceof是谁的实例的意思, if(!(obj instanceof Person))这里的意思是如果不是Person类型,直接返回false。
==是比较两边是否相等。
作者: 月影释    时间: 2014-3-25 13:54
==可以比较地址 也可以比较变量   instanceof比较的是类类型  怎么会一样呢
作者: 郭黎明    时间: 2014-3-26 07:50
public static void main(String[] args) {
                E e = new E();
                System.out.println(e.getClass()==E.class)
        }
}
class E  {}
这个打印出来是true,只有e.getClass()==E.class这样才可以用==,if(a instanceof b)判断的是a对象是否属于b类型,a为对象,b为类,如果用==你可以这样判断ifa.getClass()==b.class),因为如果a对象属于b类,则它们的字节码是一样的



作者: 海世山盟    时间: 2014-3-26 11:25
instanceof 多用在多态中判断类型是否一致,而==则是在数值之间比较相等关系。用于比较的还有存在于Object 类中的equals();默认的是比较两个句柄地址值是否相等(即两个句柄是否指向同一个实例),通常我们需要复写equals方法来满足我们实际需求。

作者: MVP    时间: 2014-3-26 18:13
instanceof 比较的是该类对象是否所属关系,==判断的是地址值(引用型数据)或者数值是否相同数值是否相同(基本数据类型)




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