1

我正在尝试使用 Arrays.copyOf 和 import java.util.Arrays 来调整数组的大小,但由于某种原因,即使控制台输出数组长度为 4,就像我尝试分配值时应该的那样对于数组第 4 行中的任何内容,它在尝试为第 4 行中的某些内容分配值的行上给了我一个 nullPointerException。有人可以向我解释一下吗?

import java.util.Arrays;
import static java.lang.System.out;

public class Main {
    static int TTT[][] = new int[3][3];

    public static void main(String[] args) {
        TTT = Arrays.copyOf(TTT, 4);
        out.print(TTT.length);
        TTT[3][0] = 2;
    }
}

这给了我一个输出:

4Exception in thread "main" java.lang.NullPointerException
    at Main.main(Main.java:13)

有谁知道为什么会这样。另外在旁注中是否有更好的方法让我也可以创建一个可以更改大小的数组?如果可以,请给我一些示例代码!

4

1 回答 1

2

文档中:

复制指定的数组,截断或填充空值(如有必要),使副本具有指定的长度。对于在副本中有效但在原始副本中无效的任何索引,副本将包含 null。当且仅当指定长度大于原始数组的长度时,此类索引才会存在。结果数组与原始数组的类完全相同。

发生的情况是数组大小增加了,因此int[3]在位置创建了一个新的引用,并按照文档所述TTT[3]进行了初始化。null数组具有原始类型这一事实并不意味着它应该自行初始化内部数组。

尝试:

TTT = Arrays.copyOf(TTT, 4);
TTT[3] = new int[3];
于 2012-07-09T23:50:35.780 回答