这个Java代码是如何工作的?
令人惊讶的是,输出为0,为什么Java不检查这种IndexAutofBound错误?不要惊讶。shatner[0]是一个数组(rat),恰好长度为4。所以shartner[0][3]是老鼠[3],正好是0。没有什么超出范围这个Java代码是如何工作的?,java,Java,令人惊讶的是,输出为0,为什么Java不检查这种IndexAutofBound错误?不要惊讶。shatner[0]是一个数组(rat),恰好长度为4。所以shartner[0][3]是老鼠[3],正好是0。没有什么超出范围 shatner数组中的第0行重新初始化为int[4]没有索引越界错误。shatner是一个数组数组。您将长度为1的第一个数组替换为长度为4的新数组。所以现在shatner[0][3]在记忆中是一个完全合法的地方 并不是Java没有检查IndexOutOfBoundsExcep
shatner
数组中的第0行重新初始化为int[4]
没有索引越界错误。shatner是一个数组数组。您将长度为1的第一个数组替换为长度为4的新数组。所以现在shatner[0][3]在记忆中是一个完全合法的地方 并不是Java没有检查IndexOutOfBoundsException。答案应该是零。关键是
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]);
}
因为这意味着
shatner
的第0个索引指向长度为4的数组,shatner[0][4]
是完全有效的。我认为这是因为java的数组的工作方式与预期有点不同。您将shatner
初始化为[1][1],这意味着类似于内存中的{{0},{0}}
但是,您可以为第一个元素分配一个整数,将其转换为内存中的
{0,0,0,0},{0}}
,这样Java就可以寻址新分配的索引。数组在Java中不必是矩形的。这是一个锯齿状数组,非常好。您在哪里看到“indexOutOfBound错误”?该代码执行以下操作:
- 初始化
数组(大小1)的数组(大小1),即2D数组,内容初始化为0int
- 初始化一个
数组,大小为4,内容初始化为0int
- 将二维数组的单个元素设置为大小为4 1D数组
- 访问2D数组中第一个数组的最后一个元素,即0
shatner[0] = rat;