Java 即使默认值为Null,也不会为对象类型引发Null指针异常 包装样品; 公共类Sample4Array{ 公共静态void main(字符串[]args){ int a[]=新int[10]; System.out.println(a[1]); 对于(int i=0;i
您希望引发哪个异常?NullpointerException? 它不会引发此异常,因为您没有尝试访问null引用上的任何方法/变量Java 即使默认值为Null,也不会为对象类型引发Null指针异常 包装样品; 公共类Sample4Array{ 公共静态void main(字符串[]args){ int a[]=新int[10]; System.out.println(a[1]); 对于(int i=0;i,java,arrays,Java,Arrays,您希望引发哪个异常?NullpointerException? 它不会引发此异常,因为您没有尝试访问null引用上的任何方法/变量 你所看到的是完全正常的。 当你声明一个引用变量(即一个对象)时,你真的在创建一个指向一个对象的指针。 package Sample; public class Sample4Array { public static void main(String[] args) { int a[] = new int[10]; System.out.printl
你所看到的是完全正常的。 当你声明一个引用变量(即一个对象)时,你真的在创建一个指向一个对象的指针。
package Sample;
public class Sample4Array {
public static void main(String[] args) {
int a[] = new int[10];
System.out.println(a[1]);
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
//default value is 0
}
Integer x[] = new Integer[10];
for(int i=0;i<x.length;i++) {
System.out.println(x[i]);
//default value is null & not throwing an exception.
}
}
}
在本例中,变量x是一个int,Java将为您将其初始化为0。当您在第二行中将其赋值为10时,值10将写入x指向的内存位置
但是,当您尝试声明引用类型时,会发生一些不同的情况。请使用以下代码:
int x;
x = 10;
第一行声明了一个名为num的变量,但它不包含基元值。相反,它包含一个指针(因为类型是Integer,这是一个引用类型)。由于您尚未说明指向Java的内容,因此将其设置为null,这意味着“我没有指向任何内容”
在第二行中,new关键字用于实例化(或创建)Integer类型的对象,指针变量num被分配给该对象。现在,您可以使用解引用运算符(点)引用该对象
当您声明变量但未创建对象时,会发生您询问的异常。如果您在创建对象之前尝试取消引用num
,则会出现NullPointerException
。在最简单的情况下,编译器会发现问题并通知您“num可能尚未初始化”,但有时您编写的代码不会直接创建对象。不会出现任何NullPointerException
,因为
System.out.println(x[i]);
内部使用x[i]
上的String.valueOf()
获取其字符串表示形式
Integer num;
num = new Integer(10);
String.valueOf()
内部检查传入对象是否为null,如果为null,则使用字符串null
作为其值。请参见以下内容:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
它不会抛出异常
。您不会尝试取消引用空指针。设置为整数
对象的默认值为null
。您只需打印该null
值。但是,如果您尝试取消引用该null
值,则会出现错误
如果仅执行此操作:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
变量x指向一个null
值。如果您尝试取消引用它,现在将得到一个错误
当你这样做的时候:
Integer[] x;
内存正在使用new
操作符分配给它。它不再指向null
。因此,您不会得到NullPointerException
,,因为当您构建一个int(原语)数组时,像这样inta[]=newint[10];
数组是用默认值0创建的
当你像这样构造一个整数(Object)数组时,Integer x[]=newinteger[10];
这个数组是用默认值null创建的。所以当你试图访问任何元素时,它会给你一个null值(null是一个值)
但是,如果您试图对返回的值执行任何操作,它将抛出空指针异常
x = new Integer[10];
- 任何包含对象的内容的默认值都为null
- 布尔值的默认值为false
- 字符的默认值为空字符'\u0000'(其小数
等效值为0)
- int/short/byte/long的默认值为0
- 浮点/双精度的默认值为0.0
x[i].intValue(); //this will give you java.lang.NullPointerException