本文研究的主要是java中instanceof与Class的等价性的相关问题,具体如下。
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
实例1(instanceof)
接口Person
public interface Person { public void eat(); }
实现类People
public class People implements Person { private int a=0; @Override public void eat() { System.out.println("======"+a); } }
子类xiaoming:
public class xiaoming extends People { private String name; @Override public void eat() { System.out.println("+++++++++"); } }
主函数
public static void main(String[] args) { People p=new People(); xiaoming x=new xiaoming(); System.out.println(p instanceof Person); System.out.println(p instanceof xiaoming); -----2 System.out.println(x instanceof Person); System.out.println(x instanceof People); }
注意:上面2处的代码在编译时不会报错。
运行结果:
true false true true
实例2
package com.test.class_obj; class Base { } class Derived extends Base { } public class FamilyVsExactType { static void test(Object x) { System.out.println("Testing x of type " + x.getClass().getSimpleName()); System.out.println("-----------------------------------------"); System.out.println("x instanceof Base " + (x instanceof Base)); System.out.println("x instanceof Derived " + (x instanceof Derived)); System.out.println("-----------------------------------------"); System.out.println("Base.isinstance(x) " + Base.class.isinstance(x)); System.out.println("Derived.isinstance(x) " + Derived.class.isinstance(x)); System.out.println("-----------------------------------------"); System.out.println("x.getClass() == Base.class " + (x.getClass() == Base.class)); System.out.println("x.getClass() == Derived.class " + (x.getClass() == Derived.class)); System.out.println("x.getClass().equals(Base.class)) " + (x.getClass().equals(Base.class))); System.out.println("x.getClass().equals(Derived.class)) " + (x.getClass().equals(Derived.class))); System.out.println("*****************************************"); System.out.println("*****************************************"); } public static void main(String[] args) { test(new Base()); test(new Derived()); } }
Testing x of type Base ----------------------------------------- x instanceof Base true x instanceof Derived false ----------------------------------------- Base.isinstance(x) true Derived.isinstance(x) false ----------------------------------------- x.getClass() == Base.class true x.getClass() == Derived.class false x.getClass().equals(Base.class)) true x.getClass().equals(Derived.class)) false ***************************************** ***************************************** Testing x of type Derived ----------------------------------------- x instanceof Base true x instanceof Derived true ----------------------------------------- Base.isinstance(x) true Derived.isinstance(x) true ----------------------------------------- x.getClass() == Base.class false x.getClass() == Derived.class true x.getClass().equals(Base.class)) false x.getClass().equals(Derived.class)) true ***************************************** ***************************************** Process finished with exit code 0
通过以上测试可以得出以下结论:
- instanceof() 和 isinstance() 生成的结果相同
- equals() 和 == 生成的结果相同
- 父类可以是子类的实例,但子类不可以是父类的实例
- Class 对象比较时,不考虑继承
总结
以上就是本文关于java中instanceof与Class的等价性代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
您可能感兴趣的文章:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。