簡體   English   中英

為什么這段代碼沒有拋出 nullPointerException?

[英]Why is this code not throwing a nullPointerException?

代碼片段如下。

我知道 String 的默認值為null ,它被分配給str 我不明白為什么在第一種情況下會打印null而在其他情況下(如第二個代碼片段)不打印。

public class Case1{

    static String str;

    public static void main(String[] args){

        System.out.println(str);
    }
}

\\Code prints 'null' without quotes
public class Case2{

    public static void main(String[] args){

        String a[][] = { {}, null };
        System.out.println(a[1][0]);
    }
}

\\Code throws nullPointerException

任何解釋將不勝感激。

在您的第二個示例中,您正在做的是訪問不存在的數組的第一個值:

String a[][] = { {}, null };

所以 a[1] 是 null 值,並且沒有那個 null 的 [0]。

在您的示例中,您嘗試訪問 null 上的值。

看下面的代碼

 String a[][] = { {}, null };
 System.out.println(a[1]);

它會打印

null

當您嘗試訪問 null 上的第 0 個元素時,它會拋出空指針預期,因為您嘗試訪問null上的元素

String a[][] = { {}, null };
System.out.println(a[1][0]);

它將 output

Exception in thread "main" java.lang.NullPointerException

在 case1 中,您只是打印字符串並且沒有為其分配任何值,因此默認情況下會打印 null。 您無需對該字符串執行任何操作以在此處引發 NullPointerException。 因此它不會拋出任何異常。

在 case2 中,您將 null 值分配給字符串數組並嘗試使用索引獲取 null object。 因此你得到了 nullPointerException。

如果您使用以下代碼更改 case2,您也會在此處獲得 null。

public class Case2{

public static void main(String[] args){

    String a[][] = new String[2][2];
    a[1][0] = null;
    System.out.println(a[1][0]);
    }
}

\Code 打印不帶引號的“null”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM