instanceof运算符

Posted superzxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了instanceof运算符相关的知识,希望对你有一定的参考价值。

一 instanceof运算符

  • instanceof 运算符 用于:判断 该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。如果是则返回true,否则返回false
  • 注:instanceof前一个操作数通常是一个引用类型变量,后面一个操作数通常是一个类(接口),它用于判断前面对象是否是后面的类,或者其子类、实现类的实例。如果是,则返回true,否则返回false。

二代码示例

 1 public class InstanceofTest  
 2 {  
 3     public static void main(String[] args)  
 4     {  
 5         // 声明hello时使用Object类,则hello的编译类型是Object,  
 6         // Object是所有类的父类, 但hello变量的实际类型是String  
 7         Object hello = "Hello";  
 8         // String与Object类存在继承关系,可以进行instanceof运算。返回true。  
 9         System.out.println("字符串是否是Object类的实例:"  
10             + (hello instanceof Object));  
11         System.out.println("字符串是否是String类的实例:"  
12             + (hello instanceof String)); // 返回true。  
13         // Math与Object类存在继承关系,可以进行instanceof运算。返回false。  
14         System.out.println("字符串是否是Math类的实例:"  
15             + (hello instanceof Math));  
16         // String实现了Comparable接口,所以返回true。  
17         System.out.println("字符串是否是Comparable接口的实例:"  
18             + (hello instanceof Comparable));  
19         String a = "Hello";  
20 //      // String类与Math类没有继承关系,所以下面代码编译无法通过  
21 //      System.out.println("字符串是否是Math类的实例:"  
22 //          + (a instanceof Math));  
23     }  
24 }  

 运行结果

  字符串是否是Object类的实例:true

  字符串是否是String类的实例:true

  字符串是否是Math类的实例:false

  字符串是否是Comparable接口的实例:true

三应用场景

  下面我来模拟一个简单的应用场景,加深记忆并与同学们分享交流

 1 import java.text.SimpleDateFormat;
 2 import java.util.Date;
 3  
 4 public class Test{
 5     
 6     public static void main(String[] args) {
 7         Object object = new Date();
 8         print(object);
 9     }
10     
11     public static void print(Object object) {
12         Date date = (Date) object;
13         String format = "yyyy-MM-dd HH:mm:ss";
14         String result = new SimpleDateFormat(format).format(date);
15         System.out.println(result);
16     }
17 }

  场景分析:无法保证传入print方法的实参一定为Date对象,如果传入的不是由Date或其子类创建的对象,那么以上代码就会引发“java.lang.ClassCastException”异常,这时我们可以使用instanceof运算符,用于强制类型转换之前检查对象的真实类型以避免类型转换异常,从而提高代码健壮性。

 1 import java.text.SimpleDateFormat;
 2 import java.util.Date;
 3  
 4 public class Test{
 5     
 6     public static void main(String[] args) {
 7         Object object = new String();
 8         print(object);
 9     }
10     
11     public static void print(Object object) {
12         if (object instanceof Date) {
13             Date date = (Date) object;
14             String format = "yyyy-MM-dd HH:mm:ss";
15             String result = new SimpleDateFormat(format).format(date);
16             System.out.println(result);
17         }else {
18             System.out.println("请传入由Date类或其子类创建的对象。");
19         }
20     }
21 }

 

 

 

 

 

 

 

 

 

参考链接:https://blog.csdn.net/qq_40831381/article/details/81288457

以上是关于instanceof运算符的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:仍然对 instanceof 运算符感到困惑

几行代码实现instanceof

《java基础知识》Java instanceof 运算符

四. Java继承和多态5. instanceof 运算符

tips instanceof运算符和typeof运算符的区别

JEP 305: InstanceOf