二维不同口味类型阵列的区别?这两种类型

时间:2016-04-10 09:19:34

标签: 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在这里?是否确实有第二类数组声明的优势?

请详细解释,找到几个来源但仍然困惑。

由于

2 个答案:

答案 0 :(得分:4)

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

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

例如:

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

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

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

答案 1 :(得分:1)

  

在第二个sysout语句中抛出NullPointerException

您可以期待它,因为它尚未初始化。

  

我不是试图访问成员变量只想获得长度。

你没有创建任何这样的数组或给它一个长度所以这没有意义。

  

第二类数组声明真的有什么优点吗?

您可能不希望所有数组都具有相同的长度,在这种情况下,您可以将每个数组设置为您想要的任何长度。