java 中的instanceof用法详解及instanceof是什么意思(推荐)
好,应大家的要求先给大家说下在JAVA程序中instanceof是什么意思
instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。
instanceof运算符用法
运算符是双目运算符,左面的操作元是一个对象实例,右面是一个类.当左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false
说明:
(1).一个类的实例包括本身的实例,以及所有直接或间接子类的实例
(2).instanceof左边操作元显式声明的类型与右边操作元必须是同种类或有继承关系,
即位于继承树的同一个分支上,否则会编译出错
doubleobj=1; if(objinstanceofDouble){ System.out.println("true"); }
报"IncompatibleconditionaloperandtypesdoubleandDouble"错误
obj必须是对象的实例。不能是基础数据类型。
Stringobj=1.0+""; if(objinstanceofDouble){ System.out.println("true"); }
报"IncompatibleconditionaloperandtypesStringandDouble"错误
String和Double不是位于继承树的同一个分支上。
if(nullinstanceofObject){ System.out.println("true"); }else{ System.out.println("false"); } Stringobj=null; if(objinstanceofObject){ System.out.println("true"); }else{ System.out.println("false"); }
打印都为false. null用操作符instanceof测试任何类型时都是返回false的。
if(objinstanceofnull){ System.out.println("true"); }else{ System.out.println("false"); }
编译出错。报"Syntaxerrorontoken"null",invalidReferenceType"错误。
publicclassTest{ publicstaticvoidmain(String[]args){ System.out.println(newStudent()instanceofString);//compiletimeerror System.out.println(newStudent()instanceofException);//compiletimeerror System.out.println(newStudent()instanceofObject);//compilationandoutputtrue System.out.println(newStudent()instanceofList);//compilationandoutputfalse System.out.println(newStudent()instanceofList>);//compilationandoutputfalse System.out.println(newStudent()instanceofList);//compiletimeerror System.out.println(newStudent()instanceofList
看到上面的测试结果可能会有这样那样的疑惑,为什么Student对象测试String的时候是编译错误,而测试List的时候又能够通过(难道是instanceof对接口在编译时不作检查呢,还是由于List类型本身在编译时不确定具体类型导致的),但是后面你又会发现如果是List
这里可能还有一个疑惑,我们Student已经确定类型了啊,List类型也是确定的啊,为什么能够编译通过呢,而String却不行呢(难道是自己定义的类和系统定义的类在编译处理上有不同),这里java没有做特别的说明,但是我想可能是因为final关键字的区别造成的,我们发现不论String、Integer、Long等都是最终类,他们的处理类似于编译器对常量的处理,因为编译器知道这个类在运行期间是不会有改变的,故而编译器在编译期间认为他自己能够确定这个类的最终类型。而对于自己定义的类呢(我试过系统的非最终类Hashtable、HashMap等,测试和我们自定义的类的结果一样,可以通过编译),由于不是最终类,可能编译器认为他可能在运行期间会有改变的可能,故而不把他作最为确定的类型处理,故而可以通过编译。其实当我们在自定义的类前面加上final关键字的时候,其表现就跟String、Integer、Long这些最终类测试instanceof表现的一样了。
好,下面通过实例代码看下java中instanceof用法
java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result=objectinstanceofclass
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果object是class的一个实例,则instanceof运算符返回true。如果object不是指定类的一个实例,或者object是null,则返回false。
示例代码如下:
packagecom.instanceoftest; interfaceA{} classBimplementsA{ } classCextendsB{ } classinstanceoftest{ publicstaticvoidmain(String[]args){ Aa=null; Bb=null; booleanres; System.out.println("instanceoftesttestcase1:------------------"); res=ainstanceofA; System.out.println("ainstanceofA:"+res); res=binstanceofB; System.out.println("binstanceofB:"+res); System.out.println("/ninstanceoftesttestcase2:------------------"); a=newB(); b=newB(); res=ainstanceofA; System.out.println("ainstanceofA:"+res); res=ainstanceofB; System.out.println("ainstanceofB:"+res); res=binstanceofA; System.out.println("binstanceofA:"+res); res=binstanceofB; System.out.println("binstanceofB:"+res); System.out.println("/ninstanceoftesttestcase3:------------------"); Bb2=(C)newC(); res=b2instanceofA; System.out.println("b2instanceofA:"+res); res=b2instanceofB; System.out.println("b2instanceofB:"+res); res=b2instanceofC; System.out.println("b2instanceofC:"+res); } } /* result: instanceoftesttestcase1:------------------ ainstanceofA:false binstanceofB:false instanceoftesttestcase2:------------------ ainstanceofA:true ainstanceofB:true binstanceofA:true binstanceofB:true instanceoftesttestcase3:------------------ b2instanceofA:true b2instanceofB:true b2instanceofC:true */
总结
以上所述是小编给大家介绍的java中的instanceof用法详解及instanceof是什么意思,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。