如何判断对象的类型(java)

想要判断一个对象是否是一个类的实例,有以下两种方法:

instanceof

注意:

  • 使用该关键字不仅可以判断对象是否是某个类的实例,甚至连该类继承的基类和实现的接口也都能够被识别为true。下图是Integer的继承关系图。
    在这里插入图片描述
  • Object i = new Integer(7);//注意不能定义成int类型,需要 定义成包装类Integer。

代码

        Object i = new Integer(7);//注意不能定义成int类型,需要 定义成包装类Integer
        if (i instanceof Number) {
            System.out.println("Integer i is a Number");
        } else {
            System.out.println("Integer i isn't a Number");
        }

        if (i instanceof Serializable) {
            System.out.println("Integer i is a Serializable");
        } else {
            System.out.println("Integer i isn't a Serializable");
        }

        if (i instanceof Integer) {
            System.out.println("Integer i is an Integer");
        } else {
            System.out.println("Integer i isn't an Integer");
        }

        if (i instanceof Float) {
            System.out.println("Integer i is a Float");
        } else {
            System.out.println("Integer i isn't a Float");
        }

输出结果:

Integer i is a Number
Integer i is a Serializable
Integer i is an Integer
Integer i isn't a Float

getClass()

注意:

  • 比较两个类的类信息是否一致,全相等,这其中不考虑继承实现的关系。即当且仅当该对象是要比较的那个类的实例才返回true。
  • 无论我们用Integer实例化多少个对象,当我们调用getClass()方法时返回的总是同一个对象,
  • 事实上每个类都会有且只有一个对应Class的对象,我们正是用这个Class对象来实例化该类的所有对象的,也就是Class中的newInstance()方法。
  • 其实也可以理解,既然是同一个类的信息,无论有多少个对象,他们的类信息也都是一样的,所以也就没有必要实例化那么多Class对象来存放

代码

         Object i = new Integer(7);//注意不能定义成int类型,需要 定义成包装类Integer
         if (i.getClass().equals(Number.class)) {
            System.out.println("Integer i is a Number");
        } else {
            System.out.println("Integer i isn't a Number");
        }

        if (i.getClass().equals(Serializable.class)) {
            System.out.println("Integer i is a Serializable");
        } else {
            System.out.println("Integer i isn't a Serializable");
        }

        if (i.getClass().equals(Integer.class)) {
            System.out.println("Integer i is an Integer");
        } else {
            System.out.println("Integer i isn't an Integer");
        }

        if (i.getClass().equals(Float.class)) {
            System.out.println("Integer i is a Float");
        } else {
            System.out.println("Integer i isn't a Float");
        }

输出结果:

Integer i isn’t a Number
Integer i isn’t a Serializable
Integer i is an Integer
Integer i isn’t a Float

相关链接

https://blog.csdn.net/shikangkai/article/details/50273527

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值