,,java 中的instanceof用法详解及instanceof是什么意思(推荐)

,,java 中的instanceof用法详解及instanceof是什么意思(推荐)

Instanceof是Java的保留关键字。它的功能是测试左边的对象是否是右边的类的实例,并返回一个布尔数据类型。接下来,通过这篇文章,我将向大家详细介绍instanceof在java中的用法以及instanceof的含义。请有需要的朋友参考。

好,应大家的要求先给大家说下在JAVA程序中instanceof是什么意思

Instanceof是Java的二元运算符,和==,一样。因为是字母组成的,所以也是Java的保留关键字。它的功能是测试左边的对象是否是右边的类的实例,并返回布尔数据。

instanceof运算符用法

运算符是双目运算符,左边的操作数是对象实例,右边的是类。当左边的对象由右边的类创建时,该运算符的结果为真,否则为假

说明:

(1).一个类的实例包括它自己的实例,以及它的所有直接或间接子类的实例。

(2)由的左操作数显式声明的类型。instanceof必须与右操作数同类或有继承关系,

也就是说,它位于继承树的同一分支上;否则会造成编译错误。

double obj=1;

if(obj instanceof Double){

system . out . println(' true ');

}

错误'不兼容条件操作和类型double和double '

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

字符串obj=1.0“”;

if(obj instanceof Double){

system . out . println(' true ');

}

错误'条件opera和类型string和double不兼容'

String和Double不在继承树的同一分支上。

if(对象的空实例){

system . out . println(' true ');

}否则{

system . out . println(' false ');

}

String obj=null

if(对象的对象实例){

system . out . println(' true ');

}否则{

system . out . println(' false ');

}

当使用操作符instanceof测试任何类型时,它将返回false。

if(obj instanceof null){

system . out . println(' true ');

}否则{

system . out . println(' false ');

}

编译错误。' Error '标记' null '上有语法错误,引用类型无效。

公共类测试{

公共静态void main(String[] args){

system . out . println(String的new Student()instance);//编译时错误

system . out . println(new Student()instance of Exception);//编译时错误

system . out . println(new Student()instance of Object);//编译并输出true

system . out . println(new Student()instance of List);//编译并输出false

system . out . println(new Student()instance of List?);//编译并输出false

system . out . println(list string的new Student()instance);//编译时错误

system . out . println(ListObject的新学员()实例);//编译时错误

system . out . println(new String()instance of List);//编译时错误

system . out . println(List的new String()instance?);//编译时错误

System.out.println(对象的null instanceof//编译并输出false

}

}

班级学生{

}

看到上面的测试结果,可能会有一些疑惑,比如为什么Student对象在测试String时是编译错误,而在测试List时却能通过(是因为instanceof在编译时不检查接口,还是因为List类型本身在编译时不确定具体类型),但后来你会发现,如果是ListString,编译就会失败(看来之前的猜测是错的, 而且他还要检查接口),但是回过头来,你会疑惑String测试的是List还是List?编译时直接报错,和学生对象测试List和List一样?结果大相径庭。可能这个时候你有点迷茫。此时,当我们翻阅java对instanceof运算符的描述时,发现instanceof的这些性能都与cast运算符有关。也就是说,当我们在instanceof方法中时,编译器会检查这个对象是否可以被强制转换为正确的类型,如果不能,就直接报错。如果不能确定类型,将根据运行时编译它。

这里可能还有一个疑问。我们学生确定了类型,列表类型也确定了。为什么可以编译通过,而String不能?(是不是在编译处理上自定义类和系统定义类不一样)?java在这里没有做什么特别的解释,但是我觉得可能是final关键字的不同造成的。我们发现无论字符串、整数、长整型等。是最终类,它们的处理类似于编译器对常量的处理。因为编译器知道这个类在运行时不会改变,所以编译器认为他可以在编译时自己确定这个类的最终类型。至于自定义类(我试过系统的非final类Hashtable,HashMap等。而且测试结果和我们自定义的类一样,可以编译),因为不是最终的类,编译器可能认为在运行时可能会发生变化,所以没有把它当作最确定的类型,所以可以编译。事实上,当我们在自定义类前面添加final关键字时,其性能与最终类测试instanceof相同,如String、Integer和Long。

好,下面通过实例代码看下java中instanceof用法

java中的instanceof操作符用于指示一个对象在运行时是否是一个特定类的实例。Instance通过返回一个布尔值来指示这个对象是这个特定类的实例还是它的子类。

用法:

result=类的对象实例

参数:

结果:布尔类型。

对象:必需。任何对象表达式。

Class:必选。任何已定义的对象类。

说明:

如果object是instanceof类,则instanceof运算符返回true。如果object不是指定类的实例,或者object为null,则返回false。

示例代码如下:

包com.instanceoftest

接口A{}

B类实现了一个{

}

C类扩展了B {

}

类instanceoftest {

公共静态void main(String[] args){

A a=空;

B b=空;

布尔res

system . out . println(' instance oftest测试用例1:');

res=a的实例;

system . out . println(' A:' RES '的一个实例);

res=b的B实例;

system . out . println(' B instance of B:' RES ');

system . out . println('/ninstanceoftest测试用例2:');

a=new B();

B=new B();

res=a的实例;

system . out . println(' A:' RES '的一个实例);

RES=B的a实例;

system . out . println(' a instance of B:' RES ');

RES=A的b实例;

system . out . println(' b instance of A:' RES ');

res=b的B实例;

system . out . println(' B instance of B:' RES ');

system . out . println('/ninstanceoftest测试用例3:');

b B2=(C)new C();

RES=A的b2实例;

system . out . println(' B2 instance of A:' RES ');

res=b的b2实例;

system . out . println(' B2 instance of B:' RES ');

RES=C的b2实例;

system . out . println(' B2 instance of C:' RES ');

}

}

/*

结果:

instanceoftest测试用例1: -

A: false的一个实例

B的B实例:假

instanceoftest测试用例2: -

A: true的一个实例

B的一个例子:真的

A的b实例:真

B的B实例:真

instanceoftest测试用例3: -

b2的实例:真

B的b2实例:真

C的b2实例:真

*/

总结

以上是边肖介绍的instanceof在java中的用法以及instanceof是什么意思的详细说明。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: