一个简单的表达:
Object val = true ? 1l : 0.5;
val是什么类型?好吧,从逻辑上讲,val应该是一个Long值为1的对象。但是 Java 认为val是一个Double,其值为1.0。
自动装箱不需要任何东西
Object val = true ? new Long(1) : new Double(0.5);
结果具有相同的行为。
只是为了澄清:
Object val = true ? "1" : 0.5;
产生正确的String。
谁能解释我为什么他们这样定义?对我来说,这似乎是一个非常糟糕的设计或实际上是一个错误。