【问题标题】:Difference between two dimensional different flavours type array ? Advantages of these of two type二维不同风味类型数组之间的区别?这两种类型的优点
【发布时间】:2016-07-31 09:24:45
【问题描述】:

我正在尝试深入研究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 在这里? 第二类数组声明真的有什么优势吗??

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

谢谢

【问题讨论】:

  • 阅读锯齿状数组。

标签: java arrays multidimensional-array nullpointerexception


【解决方案1】:

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 元素的数组.

【讨论】:

  • 一个困惑仍然存在,为什么长度给出nullPointer 它可能反映了0 的大小。
  • @VikrantKashyap obj2[1] 为空,因此obj2[1].length 提供NullPointerException,就像任何取消引用空引用的尝试一样。
【解决方案2】:

在第二个 sysout 语句中抛出 NullPointerException

因为它还没有被初始化,所以你会期望它。

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

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

第二种类型的数组声明真的有什么好处吗??

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多