簡體   English   中英

從Object轉換為布爾有效的Java語言?

[英]Is casting from Object to boolean valid Java language?

我在多年前由C程序員實現的工作中偶然發現了一個舊的Java代碼,我們不禁開始討論代碼 - 即使它編譯和工作 - 實際上是有效的Java代碼。

final Object o = Boolean.TRUE;
boolean b = (boolean) o;

這基本上是有問題的代碼。 正如你所看到的,從對象到原始布爾值有一個不太好的演員,這應該是不可能的,但是由於一些隱含的拳擊魔術而恰好起作用。

如果我做以下事情

final Object o = Boolean.TRUE;
if (o instanceof Boolean) {
  b = (boolean) o;
}

我甚至在o被投射到b的行上發出警告,說“Cast與給定的instanceof不兼容”。 這顯然是正確的,但由於隱式拳擊仍然有效。

現在問題是:Java規范實際上是否允許轉換,因此應該適用於未來的JVM版本? 或者它恰好在當前版本中工作,可能不再適用於未來的JVM更新?

是。 這是合法的。 JLS-5.1.8。 拆箱轉換說(部分)

拆箱轉換將引用類型的表達式轉換為基本類型的相應表達式。 具體而言,以下八次轉化稱為拆箱轉化

  • 從類型Boolean到類型boolean

這在JLS 8的第5.5節中定義。 它特別允許使用從Object到基本類型的拆箱轉換進行轉換(另請參見表5.5-A)。 特別是JLS說:

通過拆箱轉換,可以將引用類型的表達式轉換為基本類型而沒有錯誤。

有關更多詳細信息,請參閱我對類似問題的回答: Java 6與Java 7之間的自動拆箱差異

暫無
暫無

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

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