[英]Comparing Object and int in Java 7
我最近偶然發現了一個讓我停下來思考的問題......
對我來說,下面的代碼總是應該觸發錯誤,但當我的一位同事問我為什么Eclipse沒有顯示錯誤時,我無法回答任何問題。
class A {
public static void main(String... args) {
System.out.println(new Object() == 0);
}
}
我已經調查過,發現在源級別為1.6時確實會拋出一個錯誤:
incomparable types: Object and int
但現在在1.7中編譯好了。
請問,有哪些新功能可以保證這種行為?
你是什么意思“什么新功能可以保證這種行為?” ? 1.7正在解決1.6中存在的問題。 new Object() == 0
應該從未產生錯誤,並且始終導致自動裝箱觸發。
根本沒有理由
Object a= 5 ;
是正確的,而不是表達
a == 3
甚至
a == 5
這是非常奇怪的,恕我直言,與語言規范本身相矛盾。
但是,從動態的角度來看, a == 5
仍然評估為false
而(Integer)a == 5
或者甚至(int)a == 5
評估為true
。 原因是autounboxing被設計為永遠不會產生ClassCastException
,因此只能靜態地發生包裝類型。 后兩種情況是顯式強制轉換,因此通常允許使用ClassCastException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.