Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使默认值为Null,也不会为对象类型引发Null指针异常 包装样品; 公共类Sample4Array{ 公共静态void main(字符串[]args){ int a[]=新int[10]; System.out.println(a[1]); 对于(int i=0;i_Java_Arrays - Fatal编程技术网

Java 即使默认值为Null,也不会为对象类型引发Null指针异常 包装样品; 公共类Sample4Array{ 公共静态void main(字符串[]args){ int a[]=新int[10]; System.out.println(a[1]); 对于(int i=0;i

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

您希望引发哪个异常?NullpointerException? 它不会引发此异常,因为您没有尝试访问null引用上的任何方法/变量


你所看到的是完全正常的。

当你声明一个引用变量(即一个对象)时,你真的在创建一个指向一个对象的指针。
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