2014-09-13 65 views
4

我寫了一個真的簡單的代碼基於另一個問題,那就是:顯示java.lang.NullPointerException與布爾

這引發了我的錯誤

顯示java.lang.NullPointerException 5號線和17

我不知道我在做什麼錯。

public class Main { 

public static String bool(Boolean param){ 
    if(param == true){ (line 5) 
     return "a"; 
    }else if(param == false){ 
     return "b"; 
    } 
    return "c"; 

} 

public static void main(String[] args){ 

    System.out.println(bool(true)); 
    System.out.println(bool(null)); (line 17) 
    System.out.println(bool(false)); 


} 

}

+0

如果可能,儘量避免使用布爾值(或其他包裝類類型),或者如果您必須使用它,請在使用它之前對其進行空測試。 – 2014-09-13 14:43:46

+0

@HovercraftFullOfEels這是我們的朋友從幾分鐘前,測試出他的任務問題的解決方案:) – 2014-09-13 14:44:33

+0

@MarkoTopolnik:的確如此。 1+給你的答案。 – 2014-09-13 14:54:18

回答

16

null不能自動拆箱到原始boolean值,這是當你試圖將它與true比較會發生什麼。在

param == true 

類型的trueboolean,因此左邊的操作數也必須是boolean。您正在傳入一個Boolean,這是一個對象,但可以自動取消裝箱到boolean

因此,這等同於

param.booleanValue() == true 

顯然,如果paramnull,上述拋出NullPointerException

爲了避免自動拆箱的隱藏陷阱,你可以改爲與Boolean對象一起工作:

if (Boolean.TRUE.equals(param)) 
    return "a"; 
if (Boolean.FALSE.equals(param)) 
    return "b"; 
return "c"; 
+0

布爾靜態和方法的絕妙之處在於,它簡化了代碼! +1 – 2016-11-01 07:37:05

+0

這也適用: 'import static java.lang.Boolean.TRUE; if(param == TRUE){}' – sorin7486 2017-09-01 11:48:52

+0

@ sorin7486它通常不起作用:'new Boolean(true)!= Boolean.TRUE'。 – 2017-09-01 15:01:05

0

您使用的Boolean代替booleanBoolean是一個類,這意味着您可以爲其分配對象。在你的情況下,你通過了一個null,然後分配給參數。然後您嘗試使用param,這當然導致NullPointerException

您可以:

  • 擺脫線bool(null)
  • 變化Booleanboolean在參數bool()
  • 添加一個else如果當paramnull
1

你代碼將java.lang.Boolean實例與基元01進行比較,這意味着拆箱java.lang.Boolean。由於null無法拆箱,因此引發NullPointerException

您可以解決此通過使用內置的常量Boolean.TRUEBoolean.FALSE

public static String bool(Boolean param){ 
    if(Booelean.TRUE.equals(param){ 
     return "a"; 
    }else if(Booelean.FALSE.equals(param){ 
     return "b"; 
    } 
    return "c"; 
} 
+0

布爾靜力學和方法的很棒的技巧,它簡化了代碼! +1 – 2016-11-01 07:42:30

0

所以,你的程序必須是這樣的。

public class BooleanBug { 

    public static String bool(Boolean param) { 
     if ((null != param) && param.booleanValue() == true) { 
      return "a"; 
     } else if ((null != param) && param.booleanValue() == false) { 
      return "b"; 
     } 
     return "c"; 

    } 

    public static void main(String[] args) { 

     System.out.println(bool(true)); 
     System.out.println(bool(null)); 
     System.out.println(bool(false)); 

    } 
} 
相關問題