下面的程序分别打印“假”与“真”:不需要自动装箱魔术
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
为何选择近距离投票?这对我来说看起来像个很好的问题。 –