如果我有class A {
和class B extends A {
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
打印出真或假?
答案 0 :(得分:14)
JLS states如果B可分配给A,则为是,B []可分配给A []。
这打开了严重影响的大门,但是这段代码证明了这一点:
class A {}
class B extends A {}
class C extends A {}
//...
B[] bs = new B[2];
A[] as = bs;
as[0] = new C(); //runtime error
B b = bs[0];
此代码compiles but fails at runtime。我们称缺乏类型安全性。
答案 1 :(得分:1)
// A.java
public class A {}
// B.java
public class B extends A {}
// Test.java
public class Test {
public static void main(String[] args) {
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
}
}
运行时:
> javac *.java && java Test
true
答案 2 :(得分:0)
它会打印true
。
答案 3 :(得分:-4)
假。
数组不遵循与普通对象相同的规则。