instanceof方法怎么在java中使用

  介绍

这篇文章给大家介绍instanceof方法怎么在java中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

运算符是java的一个二元操作符,祝辞,和==& lt;是同一类东东。由于它是由字母组成的,所以也是java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回布尔类型的数据。

<强> instanceof运算符用法

运算符是双目运算符,左面的操作元是一个对象实例,右面是一个类。当左面的对象是右面的类创建的对象时,该运算符运算的结果是真的,否则是假

<强>说明:

(1)。一个类的实例包括本身的实例,以及所有直接或间接子类的实例

(2) .instanceof左边操作元显式声明的类型与右边操作元必须是同种类或有继承关系,

即位于继承树的同一个分支上,否则会编译出错,,,,,

, double  obj=1;   ,如果(obj  instanceof 双){   ,System.out.println (“true");   以前,}

报“不相容条件双操作数类型和Double"错误

,,,,,obj必须是对象的实例。不能是基础数据类型。

,String  obj=1.0 +““;
  ,如果(obj  instanceof 双){
  ,System.out.println (“true");
  以前,} 

,,,,,,报“不相容条件操作数类型字符串和Double"错误

字符串和双不是位于继承树的同一个分支上。

如果(null  instanceof 对象){
  ,System.out.println (“true");
  ,其他}{
  ,System.out.println (“false");
  ,}
  ,String  obj=零;
  ,如果(obj  instanceof 对象){
  ,System.out.println (“true");
  ,其他}{
  ,System.out.println (“false");
  以前,} 

,,,,,打印都为假只空用操作符instanceof测试任何类型时都是返回假的。

如果(obj  instanceof  null) {
  ,System.out.println (“true");
  ,其他}{
  ,System.out.println (“false");
  以前,} 

编译出错。报“语法错误> public  class  Test  {   ,public  static  void  main (String [], args) {   ,System.out.println (new 学生(),instanceof 字符串);//compile  time 错误   ,System.out.println (new 学生(),instanceof 例外);//compile  time 错误   ,System.out.println (new 学生(),instanceof 对象),,//compilation 以及output 真实的   ,System.out.println (new 学生(),instanceof 列表),,//compilation 以及output 错误的   ,System.out.println (new 学生(),instanceof  List<?祝辞);,//compilation 以及output 错误的   ,System.out.println (new 学生(),instanceof  List);//compile  time 错误   ,System.out.println (new 学生(),instanceof  List);//compile  time 错误   ,System.out.println (new 字符串(),instanceof 列表);//compile  time 错误   ,System.out.println (new 字符串(),instanceof  List<?祝辞);//compile  time 错误   ,System.out.println (null  instanceof 对象),,//compilation 以及output  false    ,   ,}   }   学生{class    }

看到上面的测试结果可能会有这样那样的疑惑,为什么学生对象测试字符串的时候是编译错误,而测试单的时候又能够通过(难道是运算符对接口在编译时不作检查呢,还是由于列表类型本身在编译时不确定具体类型导致的),但是后面你又会发现如果是List的时候编译就不通过了(看来前面的猜测是错误的,他对接口是要做检查的),可是往后面看,你又会纳闷弦测试列表还是List<?祝辞的时候,直接在编译期就报错了,这跟学生对象测试列表和List<?祝辞的结果大不同,可能此时你有点相当不解了。我们这个时候翻看java对instanceof操作符的说明时,发现instanceof的这些表现都是跟演员操作符是有点关系的,就是说当我们在instanceof方法时,编译器会检查这个对象能够投到右边的类型,如果不能投则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

这里可能还有一个疑惑,我们学生已经确定类型了啊,列表类型也是确定的啊,为什么能够编译通过呢,而弦却不行呢(难道是自己定义的类和系统定义的类在编译处理上有不同),这里java没有做特别的说明,但是我想可能是因为最后的关键字的区别造成的,我们发现不论字符串,整数,长等都是最终类,他们的处理类似于编译器对常量的处理,因为编译器知道这个类在运行期间是不会有改变的,故而编译器在编译期间认为他自己能够确定这个类的最终类型。而对于自己定义的类呢(我试过系统的非最终类Hashtable, HashMap等,测试和我们自定义的类的结果一样,可以通过编译),由于不是最终类,可能编译器认为他可能在运行期间会有改变的可能,故而不把他作最为确定的类型处理,故而可以通过编译。其实当我们在自定义的类前面加上最后一关键字的时候,其表现就跟字符串,整数,长这些最终类测试运算符表现的一样了。

instanceof方法怎么在java中使用

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5