有人可以解释一下数组在 Java 中是如何工作的吗?
我对以下代码感到惊讶:
Object test = new Object[2][2];
Object test2 = new Object[] {
new Object[2],new Object[2]
};
Object test3 = new Object[2][];
((Object[])test3)[0] = new Object[2];
((Object[])test3)[1] = new Object[2];
System.out.println(test instanceof Object[]);
System.out.println(test instanceof Object[][]);
System.out.println(test2 instanceof Object[]);
System.out.println(test2 instanceof Object[][]);
System.out.println(test3 instanceof Object[]);
System.out.println(test3 instanceof Object[][]);
只有 test2 不是 Object[][] 的实例
运行时有什么区别?
编辑:我看到了一些答案。Jon Skeet,请注意我可以:
Object[] test4 = (Object [])test;
test4[0] = "blaaa";
test4[1] = "toto";
System.out.println(test4);
test instanceof Object[] 返回 true,并且在演员表运行时不会引发异常。根据 Sierra & Bates 的 SCJP 书,测试 IS-A Object[][] 但也测试 Object[]
但是当试图用“test4[0] = “blaaa”;”重新分配一个新值时,我得到一个异常:线程“main”中的异常 java.lang.ArrayStoreException: java.lang.String at Main.main(Main.爪哇:24)
所以在运行时,test 和 test2 似乎都是 IS-A Object[],并且都包含对象数组,但其中只有一个 IS-A Object[][]