2010-10-20 86 views
7

布爾我有一個代碼鑄造布爾在Java

public class BooleanTest { 
    public BooleanTest() { 
     super(); 
    } 


    public static void main(String args[]){ 
     BooleanTest bt = new BooleanTest(); 
     bt.doProcess(); 

    } 

    private boolean method() { 
     return false; 
    } 

    private void doProcess() { 
     Boolean obj = (Boolean)method(); 
     System.out.println(obj.booleanValue()); 
    } 
} 

的問題是可以行System.out.println(obj.booleanValue());NullPointerException在任何情況下?

+4

每當我看到它,我想知道爲什麼人們寫沒有參數構造函數並顯式調用super()。 – Qwerky 2010-10-20 13:03:54

+0

因爲有人可能會添加另一個構造函數,並且要確保noarags構造函數總是存在。因爲它在邏輯上更加明確。雖然我必須承認在一個說明性的代碼片段中,這不是很有用。 – DJClayworth 2010-10-20 13:29:12

+0

也不需要調用super()。 – 2010-10-20 19:38:54

回答

11

不,當您將原始值放入其等效包裝類型時,結果永遠不會爲空。

+2

這是因爲原始類型可以**從不**爲空。 – 2010-10-20 12:47:54

+0

@The精英紳士這就是我提到的 – 2010-10-20 12:51:52

+0

@ org.life.java,對不起,從未讀過你的帖子.... – 2010-10-20 12:53:20

7

沒有

原因:原始永遠保持空,因此將它們轉換爲包裝將永遠導致NPE,

而且還無需種姓它將autobox

+2

這與默認值沒有任何關係。這與原始類型是值類型有關 - 「int」變量的值是整數本身,而不是引用......所以它怎麼可能是'null'? – 2010-10-20 12:59:33

+0

@Jon,我提到的默認值只是爲了讓OP明白,在任何情況下,基元都不會成爲NULL – 2010-10-20 13:03:38

+2

life.java:對我來說,混淆的東西不僅僅是讓它們變得更清晰。值類型和引用類型之間的區別與默認值很少有關。 – 2010-10-20 13:13:07

3

它永遠不會拋出一個NPE,並且如果您使用java> = 1.5,則不需要拋出它。它被稱爲從JDK 1.5引入的自動裝箱。

2

只是爲了迂迴,你可能已經將System.out設置爲null,那麼該行將生成一個NPE。

但那會很奇怪。