2D数组大小更改错误Java

时间:2012-07-09 23:46:40

标签: java arrays dynamic size

我正在尝试使用带有导入java.util.Arrays的Arrays.copyOf来调整数组的大小但是出于某种原因,即使控制台正在输出数组长度为4,就像我应该尝试的那样为数组第4行中的任何内容赋值给它一个nullPointerException,它会尝试为第4行中的某个值赋值。任何人都可以向我解释这个吗?

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)

有谁知道为什么会这样。另外还有一个方面是我有一个更好的方法来制作一个可以改变大小的阵列吗?如果是这样,请给我一些示例代码!

1 个答案:

答案 0 :(得分:2)

来自documentation

  

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

数据大小会增加,因此会在int[3]位置创建对TTT[3]的新引用,并根据文档说明使用null进行初始化。数组具有基本类型的事实并不意味着它应该自己初始化内部数组。

尝试:

TTT = Arrays.copyOf(TTT, 4);
TTT[3] = new int[3];