Java 深入学习(26) —— instanceof 与 Class 的等价性
2018-01-18 19:19
429 查看
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 编程思想》
相关文章推荐
- java中instanceof与Class的等价性代码示例
- JVM深入学习-Java代码执行篇二-[装载Class ]
- Java 深入学习(24) —— Class 对象
- java学习3——instanceof和getClass()方法不能乱用,区别很大
- JVM 深入学习:Java 解析 Class 文件过程解析
- java利用ClassLoader载入配置文件的深入研究
- 深入Java关键字instanceof
- Java学习过程应该深入理解的一些重点
- java 构造函数深入学习
- Java ClassLoader深入研究
- Java ClassLoader深入讲解
- java.lang.Class 类学习
- 深入学习JAVA-WEB开发时扎实掌握JAVA基础的重要性
- 学习Java的第一步是安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加
- Java学习笔记---16.面向对象编程11-Java多态性,instanceof及Object类
- java网络编程 深入学习
- 深入探讨、理解Java的CLASSPATH
- Java 学习I-class
- java class loader 学习
- 【转载】Java学习过程应该深入理解的一些重点