java - 二维不同口味类型数组之间的区别?这两种类型的优点

标签 java arrays multidimensional-array nullpointerexception

我正在尝试深入研究array。试了那么多多维数组也没看懂

class Test
{
    public static void main (String[] args) throws java.lang.Exception
    {

        String [][] obj1 = new String [10][5];
        String [][] obj2 = new String [10][];

        System.out.println(obj1[1].length);
        System.out.println(obj2[1].length);
    }
}

在这个例子中,我尝试了两个二维数组。

String [][] obj1 = new String [10][5];String [][] obj2 = new String [10][];

现在

System.out.println(obj1[1].length); 将长度 5 作为输出。完全清除。

在第二个 sysout 语句中抛出 NullPointerException

System.out.println(obj2[1].length); 完全未清除。因为我不是要访问成员变量,只想获取长度。

那么,为什么 NullPointerException 在这里? 第二种类型的数组真的有任何优势声明吗??

请详细说明,找了好几个Source还是一头雾水。

谢谢

最佳答案

String [][] obj2 = new String [10][]; 中,您正在初始化 obj2 以引用 10 个 String[] 的数组 元素。数组的元素被初始化为 null,这就是 obj2[1].length 抛出 NullPointerException 的原因。

这种类型的声明允许您在二维数组中分配不同长度的数组。

例如:

obj2[0] = new String[5];
obj2[1] = new String[10];

String [][] obj1 = new String [10][5];

所有内部数组的长度都为 5,因为在这里您初始化 obj1 以引用 10 个 String[] 元素的数组,每个元素都是初始化为引用 5 个 String 元素的数组。

关于java - 二维不同口味类型数组之间的区别?这两种类型的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527976/

相关文章:

java - 防止子类覆盖接口(interface)

arrays - PowerShell-使用不同的键创建哈希表数组

java - 如何创建简单的扑克手牌算法?

java - Android - 是否有已经轮询 GPS 位置的可查询服务?

java - Eclipselink JPA ManyToOne 映射问题

java - 三角测试仪

c - 在 C 多维数组中查找水平对

php - 如何将sql对象转换为多维数组?

asp.net - Newtonsoft.json 抛出错误 : Array was not a one-dimensional array

perl - 如何使用 Perl 将多维数组 (AoA) 添加到 Excel?