class A {}
class B {}
public class Demo {
public static void main(String[] args) {
A a = new A();
System.out.println(a instanceof B);
}
}
此代码给出编译时错误。 如何使用instanceof
在object不是指定类的实例时给出false而不是编译时错误。java中的运算符实例
class A {}
class B {}
public class Demo {
public static void main(String[] args) {
A a = new A();
System.out.println(a instanceof B);
}
}
此代码给出编译时错误。 如何使用instanceof
在object不是指定类的实例时给出false而不是编译时错误。java中的运算符实例
Java知道A
不能是B
所以它不会编译。如果更改行
Object a = new A();
它会编译(并返回false),因为它不再能告诉我们,如果一个Object
可以转换成B
类型。
我的意思是说如果对象是一个类的实例,那么它的真实性就是真,如果不是,则为false。但是当我尝试第二种情况时,它不是给虚假给编译时错误.......但由于定义说它有两个值true和false,并且如果object不是类的一个实例,所以如果得到错误,它会给出false。 – Ankit
当您将它与不相关的类型一起使用时,它永远不会编译。 'instanceof'适用于有问题的对象可以合法地成为你正在测试的类型的情况。 'myBird instanceof Eagle' – hughjdavey
@Ankit因为编译器知道根据类型A(与B无关)的规范变量不能容纳B的实例,所以这样的测试永远不会返回true,所以即使写入也没有意义它。编写这样的代码很可能基于不正确的假设,所以最好现在停止程序员而不是让他错误。 – Pshemo
您可以使用此:
System.out.println(a.getClass().equals(B.class));
相反的:
System.out.println(a instanceof B);
thanx ....这对我来说是新的 – Ankit
这不是相同。例如,'“”.getClass()。equals(Object.class)'为false,但是''“instanceof Object'为true。 'instanceof'匹配子类,'equals'不匹配。 –
如果class A
和B
通过继承是不相关的,那么当你尝试执行a instanceof B
就你而言,A
不是B
的子类,所以你可以“T做一个instanceof
检查像a instanceof B
但是,如果你改变你的类象下面这样:
class A {}
class B extends A {}
public static void main(String[] args) {
B b=new B();
System.out.println(b instanceof A);
}
现在b instanceof A
将返回true
因为B
IS-A(类型)A
您可以阅读关于相同主题的Java doc here:
instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例 或者实现特定接口的类的实例。
非常感谢你 – Ankit
如果
RelationalExpression
到ReferenceType
的铸造(§15.16)将被拒绝作为一个编译时间错误,那么instanceof
关系式同样产生一个编译时间错误。在这种情况下,instanceof
表达式的结果永远不会成立。
(如果它们被描述RelationalExpression instanceof ReferenceType
)
你不能写B b = (B) a;
要么,因为A
和B
都是类(*),并且是不相关的,在这个意义上A
直接或间接不扩展B
,反之亦然。
因此,对A
的引用永远不能包含B
的实例,因此对此进行测试是无意义的。因此,编译器会阻止您对此进行测试,因为它可能表示出现逻辑错误。
(*),你可以写a instanceof B
如果B
是一个接口,因为a
可能指的A
子类,还实现了B
,例如
class ChildOfA extends A implements B {}
A a = new ChildOfA();
System.out.println(a instanceof B); // fine.
您是否在同一个文件中编译了'class A'和'class B'? –
尝试用'Object a = new A();' – Pshemo