我正在学习'instanceof'java,但我不能清楚地理解'instanceof',我认为下面的答案是对的和错的,但结果都是对的。你能解释一下为什么会有这样的结果吗?如我所知,当a是b(父)的子对象,而b的一个示例是'false'时,结果与我所想的不同。
class Car{
String color;
int door;
}
class FireEngine extends Car{
void water(){
System.out.println("water");
}
}
public class Operator {
public static void main(String[] args) {
Car car = new FireEngine();
FireEngine fireCar = new FireEngine();
System.out.println(car instanceof FireEngine);
System.out.println(fireCar instanceof Car);
}
}
5条答案
按热度按时间cnh2zyt31#
声明!=价值
你宣布
car
作为一辆车,但它的价值是FireEngine
.instanceof
基于值工作,而不是基于变量的声明!!!缩短可能有助于理解:
xxe27gdn2#
输出
instanceof
取决于要测试其类型的变量的运行时类型。变量的编译时类型无关紧要(只要x instanceof
y将返回真值x
,否则表达式将无法通过编译)。两者
car
以及fireCar
保留示例FireEngine
在你的代码里。从那以后呢FireEngine
是一种Car
,两者car
以及fireCar
是instanceof
两者Car
以及FireEngine
,所以你的密码会打印出来true
以及true
.cbwuti443#
instanceof运算符的实现。如果对象参数(可以是表达式)是类类型的示例,则返回布尔值。
输入1:返回对象的对象或表达式。
输入2:返回类的类或表达式返回:一个布尔值,它是针对类测试对象的结果。
有关更多信息,请浏览javadocs@http://docs.oracle.com/cd/e13155_01/wlp/docs103/javadoc/com/bea/p13n/expression/operator/instanceof.html
有关更详细的示例说明,请浏览以下网页:http://mindprod.com/jgloss/instanceof.html
h6my8fg24#
在java中有两种类型的绑定:静态(引用类型)和动态(对象类型)。
就你而言:
汽车是静态的,消防车是动态的。这意味着,您实际上正在使用fireengine(对象类型)。你可以把汽车想象成一个特殊的指针,它的形状指向的是一个真实的物体,那就是你那令人敬畏的消防车。如果你读了instanceof你能理解它,这个方法告诉你一个对象是一个类的示例,而不是引用。所以编译器将看到:fireenge(car)instanceof fireenge?当然,让我们返回一个真实的!
你也可以看看这篇文章:'instanceof'操作符是用来做什么的?
tf7tbtn25#
声明
不正确。
instanceof
不检查子对象,而是测试父对象。