Java 数组的子类型

Java 数组的子类型,java,Java,如果我有A类{和B类扩展{将 B[] b = new B[1]; b[0] = new B(); System.out.println(b instanceof A[]); 打印出正确还是错误?错误 数组不遵循与普通对象相同的规则。如果B可分配给A,则B[]可分配给A[] 但是,这打开了严重影响的大门,这一代码表明: class A {} class B extends A {} class C extends A {} //... B[] bs = new B[2]; A[] as = b

如果我有
A类{
B类扩展{

B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
打印出正确还是错误?

错误

数组不遵循与普通对象相同的规则。

如果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];

此代码。我们称之为缺乏类型安全性。

它将打印
true

// 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

当您尝试它时发生了什么?您没有访问Java编译器或其他什么的权限?我真傻。太懒了,无法创建新的main class=(好吧,您有50/50的机会,很抱歉没有成功。您可能误解了数组和泛型。我记得类型安全的含义,并且错误地记得如何处理它。