这个Java代码如何工作?

时间:2010-04-26 13:40:53

标签: java

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错误?

7 个答案:

答案 0 :(得分:6)

不要惊讶。 shatner [0]是一个数组(大鼠),恰好是长度为4.所以shartner [0] [3]是rat [3],恰好是0 ..

答案 1 :(得分:5)

您在哪里看到“indexOutOfBound错误”?代码执行以下操作:

  • 初始化int数组(大小为1)的数组(大小为1),即2D数组,内容以0
  • 初始化
  • 初始化int数组,大小为4,内容初始化为0
  • 将2D数组的单个元素设置为大小为4的1D数组
  • 访问2D数组中第一个数组的最后一个元素,即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中,数组不必是矩形的。这是一个锯齿状的阵列,非常好。