我正在尝试深入研究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/