下面的程序分別打印「假」與「真」:不需要自動裝箱魔術
Number n = true ? new Long(1) : new Double(2.0);
System.out.println(n instanceof Long);
System.out.println(n instanceof Double);
所以不會是一個長期的,但一個雙。然而,它的工作如預期正常類: 有
class B {}
class D1 extends B {}
class D2 extends B {}
會打印出「真」:
B b = true ? new D1() : new D2();
System.out.println(b instanceof D1);
這意味着它不工作一樣像上面的例子。
我確定有一些與自動裝箱有關的東西,但它真的是它的工作方式?爲什麼她使用裝箱,當Number類是Long和Double的超類,以便可以將表達式評估爲Number?
這真的很痛苦,因爲當打印n時,它會打印爲雙值。 (我知道這是很容易的解決方法,但讓我抓狂)
的':'取型最後一個表達式。如果你使它成爲'null',那將是'Long':P。 –
不,它不需要最後一個表達式的類型,只需看第二個例子即可。當然,代碼僅僅是一個例子,但想象一下,真實的布爾信息在現在的'真實'站在了最前面。 – poroszd
爲何選擇近距離投票?這對我來說看起來像個很好的問題。 –