public static void main(String[] args)
{
int [][]shatner = new int[1][1];
int []rat = new int[4];
shatner[0] = rat;
System.out.println(shatner[0][3]);
}
很惊讶,输出为0,为什么Java不检查这种indexOutOfBound错误?
答案 0 :(得分:6)
不要惊讶。 shatner [0]是一个数组(大鼠),恰好是长度为4.所以shartner [0] [3]是rat [3],恰好是0 ..
答案 1 :(得分:5)
您在哪里看到“indexOutOfBound错误”?代码执行以下操作:
int
数组(大小为1)的数组(大小为1),即2D数组,内容以0 int
数组,大小为4,内容初始化为0 答案 2 :(得分:4)
没有任何事情发生。
shatner
数组中的第0行重新初始化为int[4]
。
答案 3 :(得分:3)
没有索引越界错误。 shatner是一个数组数组。你用长度为4的新数组替换了第一个长度为1的数组。所以现在shatner [0] [3]在记忆中是一个完全合法的地方。
答案 4 :(得分:3)
并不是Java不检查IndexOutOfBoundsException。答案应该是零。关键是
shatner[0] = rat;
因为这意味着shatner
的第0个索引指向长度为4的数组,shatner[0][4]
完全有效。
答案 5 :(得分:0)
我在想这是因为java的数组工作方式与预期不同。您将shatner
初始化为[1] [1],意思是内存中的{{0},{0}}
。
但是,然后,您为第一个元素分配一个整数,将其转换为内存中的{{0,0,0,0},{0}}
,因此Java正在寻址新分配的索引。
答案 6 :(得分:0)
在Java中,数组不必是矩形的。这是一个锯齿状的阵列,非常好。