不为对象类型抛出空指针异常甚至默认值为NULL

时间:2017-08-20 07:06:47

标签: java arrays

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.
    }       
}
}

考虑;第一个for循环返回0作为默认值&amp;第二个for循环,即使它的默认值为null,那么它也不会抛出任何异常

5 个答案:

答案 0 :(得分:4)

当您声明一个引用变量(即一个对象)时,您实际上是在创建一个指向对象的指针。请考虑以下代码,其中声明基本类型int的变量:

int x;
x = 10;

在此示例中,变量x是一个int,Java会将它初始化为0。当您在第二行中将其分配给10时,您的值10将被写入x指向的内存位置。

但是,当您尝试声明引用类型时会发生不同的事情。请使用以下代码:

Integer num;
num = new Integer(10);

第一行声明一个名为num的变量,但它不包含原始值。相反,它包含一个指针(因为类型是Integer,它是一个引用类型)。既然你还没有说什么指向Java就把它设置为null,这意味着&#34;我指的是什么&#34;。

在第二行中,new关键字用于实例化(或创建)Integer类型的对象,并为指针变量num分配此对象。您现在可以使用dereferencing operator引用该对象。 (一点)。

当您声明变量但未创建对象时,会出现您询问的异常。如果您在创建对象之前尝试取消引用num,则会得到{{1} }。在最琐碎的情况下,编译器将捕获问题并让您知道&#34; num可能尚未初始化&#34;但有时你会编写不直接创建对象的代码。

答案 1 :(得分:2)

您期望抛出哪种例外情况?空指针异常? 它不会抛出此异常,因为您没有尝试访问空引用上的任何方法/变量。

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

答案 2 :(得分:0)

不会有任何NullPointerException,因为

System.out.println(x[i]);String.valueOf()内部使用x[i]来获取其字符串表示。

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

String.valueOf()在内部检查传入对象是否为空,如果是,则使用字符串null作为其值。见下文:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

答案 3 :(得分:0)

它不会抛出Exception。您没有尝试取消引用空指针。设置为Integer对象的默认值为null。您只是打印null值。但是,如果您尝试取消引用null值,则会出错。

如果你只这样做:

Integer[] x;

变量x 指向null值。如果您尝试取消引用它,立即收到错误。

你做的那一刻:

x = new Integer[10];

使用new运算符为内存分配内存。它不再指向null。因此,您无法获得NullPointerException

答案 4 :(得分:0)

因为当你构造一个像这个int a[] = new int[10];的int(primitive)数组时,数组是用默认值0创建的

当您构造一个类似于此Integer x[] = new Integer[10];的Integer(Object)数组时,将使用默认值null创建数组。当您尝试访问任何元素时,它将为您提供其值为null(null是一个值)

但是,如果您尝试对返回的值执行任何操作,则会抛出空指针异常

x[i].intValue(); //this will give you java.lang.NullPointerException
  • 持有对象的任何内容的默认值为null
  • 布尔值的默认值为false。
  • 默认为char的空字符&#39; \ u0000&#39; (其小数为
    等价于0)。
  • int / short / byte / long的默认值为0
  • float / double的默认值为0.0