小编por*_*szd的帖子

数字上不需要的自动装箱魔法

以下程序分别打印'false'和'true':

Number n = true ? new Long(1) : new Double(2.0);
System.out.println(n instanceof Long);
System.out.println(n instanceof Double);
Run Code Online (Sandbox Code Playgroud)

所以它不会是长而是双.但是,它按照正常类的方式工作:拥有

class B {}
class D1 extends B {}
class D2 extends B {}
Run Code Online (Sandbox Code Playgroud)

这将打印'true':

B b = true ? new D1() : new D2();
System.out.println(b instanceof D1);
Run Code Online (Sandbox Code Playgroud)

这意味着它不像上面的例子那样工作.

我确信有一些与自动装箱相关的东西,但它真的应该如何运作吗?为什么她使用装箱,当Number类是Long和Double的超类时,表达式可以被评估为Number?

这真的很痛苦,因为在打印n时,它会打印为双倍值.(我知道解决方法很容易,但让我发疯了)

java autoboxing

8
推荐指数
1
解决办法
632
查看次数

标签 统计

autoboxing ×1

java ×1