2014-03-25 128 views
-4

我是一個java新手,所以如果這個問題聽起來很愚蠢,請原諒我。我正在學。空指針異常。爲什麼?

我想計算這個總數,但我得到一個奇怪的錯誤消息。你能幫我找到我嗎?非常感謝你

public class myfirstjavaclass { 

    public static void main(String[] args) { 
     Integer myfirstinteger = new Integer(1); 
     Integer mysecondinteger = new Integer(2); 
     Integer mythirdinteger = null; 
     Integer result = myfirstinteger/mythirdinteger; 
    } 

} 

Exception in thread "main" java.lang.NullPointerException 
at myfirstjavaclass.main(myfirstjavaclass.java:8) 
+0

'mythirdinteger = null;'然後'myfirstinteger/mythirdinteger'這等於'1/null'? – MadProgrammer

+0

爲什麼它不是零? – Mary

+1

只是一個提示:'(myfirstjavaclass.java:8)'意味着它發生在第8行。那行上是否有空指針(「引用」)? –

回答

-1

因爲你除以null,當然。你期望發生什麼?

+0

爲什麼試圖通過空拋除NullPointerException?爲什麼不是DivideByNullException或其他更具說明性的異常。 –

+0

答案並不完全如此,正如@ChrisDennett在評論中指出的那樣...... OP是一個新手,你不必粗魯。 – mellamokb

+0

@AshBurlaczenko與汽車拳擊有關,隨時提供更詳細的答案。 – djechlin

3

您不應該在這裏使用Integer(對象類型),因爲它可以是null(您不需要並在此跳過)。

當您在Java中取消引用null時,會出現NullPointerException。

在這種情況下,它有點棘手,因爲涉及到自動拆箱(原始類型和它們的對象包裝之間轉換的花哨名稱)。 引擎蓋下會發生什麼事是,

Integer result = myfirstinteger/mythirdinteger; 

真的編譯爲

Integer result = Integer.valueOf(
    myfirstinteger.intValue()/mythirdinteger.intValue()); 

intValue()的調用上一個空指針失敗。

只需使用int(原始)。

public static void main(String[] args) { 
    int myfirstinteger = 1; 
    int mysecondinteger = 2; 
    int mythirdinteger = 0; 
    int result = myfirstinteger/mythirdinteger; 
     // will still fail, you cannot divide by 0 
} 
3

在我看來你的第三個整數被賦值爲null。

順便說一句,你真的想做什麼? 如果要計算總和就像你在你的問題說,見下文

public static void main(String[] args) { 
    int first = 1; 
    int second = 2; 
    int third = 0; 
    int sum = first + second + third; 
} 

如果要計算產品,使代碼確保你不被0

public static void main(String[] args) { 
    int first = 1; 
    int second = 2; 
    int product = first/second; // this product is 0, because you are forcing an int 
    double product2 = (double) first/second; // this will be 0.5 
} 
+0

第一個例子不會編譯,因爲'第三'從未初始化... – MadProgrammer

+0

@MadProgrammer,你是對的,謝謝指出。 – RoverMAX

+0

不用擔心,很好的例子... – MadProgrammer

0

「空分「意思是」這個變量沒有引用任何東西「,這是另一種說」這個變量沒有價值「的方式。這並不意味着「價值爲零」。

NullPointerException是Java在您使用不引用任何內容的變量時爲您提供的內容,該變量需要該變量具有值。將數字除以變量的值是需要變量具有值的上下文 - 因此是例外。