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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

instanceof运算符的运算效果和Object的getClass()方法的调用效果的有什么区别吗,效果是不是一样的?

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
Object的getClass()方法返回此 Object 的运行时类,instanceof运算符如果使用 返回的应该是true或flase;所以说效果肯定不一样

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
instanceof运算符是用来在运行时指出对象是否是特定类的一个实例,它返回的是ture或者false,而Object的getClass()是返回此Object的运行时类

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.instanceof:比较的是继承关系或者实现关系的类类型,子类对象或者实现类对象放在前面,用来判断该对象是否属于父类对象。比如以下代码:
  1. class Fu{......}
  2. class Zi extends Fu{}
  3. Zi zi = new Zi();
  4. if(Zi instanceof Fu){......}
复制代码
2.getClass():则是可以通过获取任何类的类型来进行比较,概念上比较泛泛,即使两个毫不相干的类型,不需要有继承关系的,也可以获取比较,API中是这样描述的:判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回 true;否则返回 false。如果该 Class 表示一个基本类型,且指定的 Class 参数正是该Class 对象,则该方法返回 true;否则返回 false。比如:
  1. class A{......}
  2. class B{......}
  3. system.out.println(A.getClass() == B.getClass);
复制代码

评分

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

查看全部评分

回复 使用道具 举报
  1. package cn.itheima.instanceofAndGetClass;

  2. class Person{};

  3. class Teacher extends Person{};

  4. public class ClassRelationship {
  5.        
  6.         public static void main(String[] args) {
  7.                 Person p = new Person();
  8.                 Teacher t = new Teacher();
  9.                
  10.                 Class pcls = p.getClass();
  11.                 Class tcls = t.getClass();
  12.                 System.out.println("Person类别的getClass结果:" + pcls);
  13.                 System.out.println("Teacher类别的getClass结果:" + tcls);
  14.                 System.out.println("Person类与Teacher类的getClass结果比较:" + pcls.equals(tcls));
  15.                 System.out.println("p对象与Person类的instance结果比较:" + (p instanceof Person));
  16.                 System.out.println("t对象与Person类的instance结果比较:" + (t instanceof Person));
  17.         }
  18. }

  19. /**
  20. * 综上所述:
  21. * 1.getClass是Object类的一个方法,可以得到本类的类(Class)对象。在反射部分还有应用。
  22. * 2.instanceof属于基本运算符,运算对象是否属于该类或者该类的父类。两者条件满足一个即可返回true。
  23. * 3.从理论上来说,任何对象instanceof Object类都返回true,这个你可以实验一下。因为Object是所有类的超类。
  24. *
  25. */
复制代码

评分

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

查看全部评分

回复 使用道具 举报
getClass()返回当前对象的运行时类,instanceof就是判断此对象是不是某一类型的对象,即是不是某一个类的引用,是返回true,否返回false。
完全不一样的啊

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
intanceof()方法主要用来判断变量的类型。instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

   object instanceof class 返回的是boolean 值。如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

    例子:

         String s=null;
         //null值不是任何对象的实例,无论这个变量声明的是什么类型,皆返回false
        System.out.println(s instanceof String);
        //因为二者不存在继承的关系,所以编译会出错
        System.out.println(new Test() instanceof String);
        //编译没错误,但运行会出错
        Test test = (Test)new Object();

废话少说,还是举几个例子:
public interface A{}
public class B implements A{
  public static void main(String[] args){
     A a=null;
     B b=null;
     if(a instanceof A){
       System.out.println("true 1");
     }
     else{
       System.out.println("false 1");
     }
     if(b instanceof B){
       System.out.println("true 2");
     }
     else{
       System.out.println("false 2");
     }  
     a=new B();  
     if(a instanceof A){
       System.out.println("true 3");
     }
     else{
       System.out.println("false 3");
     }
     if(a instanceof B){
       System.out.println("true 4");
     }
     else{
       System.out.println("false 4");
     }
     b=new B();  
     if(b instanceof A){
       System.out.println("true 5");
     }
     else{
       System.out.println("false 5");
     }
     if(b instanceof B){
       System.out.println("true 6");
     }
     else{
       System.out.println("false 6");
     }
  }
}
输出结果是:
false 1
false 2
true 3
true 4
true 5
true 6

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

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