[英]java: boolean instanceOf Boolean?
我有點困惑:我有一個函數,它以Object作為參數。 但是如果我只傳遞一個原語甚至將布爾基元識別為布爾對象,編譯器就不會抱怨。 為什么會這樣?
public String test(Object value)
{
if (! (value instanceof Boolean) ) return "invalid";
if (((Boolean) value).booleanValue() == true ) return "yes";
if (((Boolean) value).booleanValue() == false ) return "no";
return "dunno";
}
String result = test(true); // will result in "yes"
因為原始的' true
'將被Autoboxed為Boolean
並且是一個Object
。
就像以前的答案所說的那樣,它被稱為自動裝箱。
實際上,在編譯時, javac
會將你的boolean
primitve值轉換為一個Boolean
對象。 請注意,通常,反向轉換可能會生成非常奇怪的NullPointerException
,例如,由於以下代碼
Boolean b = null;
if(b==true) <<< Exception here !
您可以查看JDK文檔以獲取更多信息。
這部分方法:
if (((Boolean) value).booleanValue() == true ) return "yes";
if (((Boolean) value).booleanValue() == false ) return "no";
return "dunno";
可以替換為
if (value == null) return "dunno";
return value ? "yes" : "no";
它被稱為autoboxing - java 1.5的新功能
http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.