我正在努力深入研究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
在这里?是否确实有第二类数组声明的优势?
请详细解释,找到几个来源但仍然困惑。
由于
答案 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
您可以期待它,因为它尚未初始化。
我不是试图访问成员变量只想获得长度。
你没有创建任何这样的数组或给它一个长度所以这没有意义。
第二类数组声明真的有什么优点吗?
您可能不希望所有数组都具有相同的长度,在这种情况下,您可以将每个数组设置为您想要的任何长度。