String a[]=null;
if(a[0]!=null)
{
System.err.println("dd-1");
}
if(a!=null)
{
System.err.println("dd-2");
}
}在第一个if条件下抛出空指针异常,但在第二个if条件下不抛出空指针异常?有没有人能给我同样的解释?这背后有没有堆内存分配的概念。
我也知道这个问题是因为缺少内存分配,字符串a[]=new String.10;请解释一下这个概念?
发布于 2012-04-27 12:01:13
在第一个if条件中,您试图访问数组中的第一个元素,即使没有为它进行分配。
在第二种情况下,你只是在测试引用。
(可以把它想象成C指针,char *str = NULL除了指向NULL的指针外不分配任何东西)
String a[]=null;没有为数组分配内存,只创建了引用。
String a[] = new String[1]在堆上创建用于保存一个String对象的内存,a指向分配的string对象。
发布于 2012-04-27 11:58:50
if(a[0]!=null)第一个条件是尝试访问数组的第一个元素(并检查它是否存在)。如果数组不存在(即为null),这将不起作用。
if(a!=null)第二个条件是检查数组本身是否为空。
数组的内存是在创建数组时(在堆上)分配的。此时,您还必须指定它的大小(这将准确地确定分配了多少内存)。内存也是用null初始化的,所以你不会得到一个新数组的垃圾数据。
对数组元素的访问不像在C中那样仅仅是指针运算,Java实际上会检查数组是否存在以及索引是否在其范围内。
发布于 2012-04-27 11:58:18
在Java中,数组不像C,它们是生活在堆中的对象,它们有一个特殊的类型和语法来访问它们的元素,但它们是对象,如果你想访问任何子索引,你需要这样做
String[] a = new String[10];之后,每个元素将被初始化为null、0或false,具体取决于数组的类型。
https://stackoverflow.com/questions/10344501
复制相似问题