在下面的代码中,我有两个相同的条件赋值操作,一个返回Double类型的对象,第二个返回字符串“Integer”。
double d = 24.0;
Number o = (d % 1 == 0) ? new Double(d).intValue() : new Double(d).doubleValue();
String result = (d % 1 == 0) ? "Integer" : "Double";
System.out.println(o.getClass()); // prints "class java.lang.Double"
System.out.println(result); // Integer
为什么完全相同的表达式返回两个不同的东西?
答案 0 :(得分:20)
嗯,那是因为JLS specs for the conditional operator:
否则,如果第二个和第三个操作数的类型可以转换(第5.1.8节)到数字类型,那么有几种情况:
- ...
- 否则,二进制数字促销(§5.6.2)将应用到操作数类型,并且 条件表达式的类型是第二个的提升类型 和第三个操作数。
数字促销在§5.6.2中定义。它说:
扩展基元转换(第5.1.2节)用于转换或 两个操作数由以下规则指定:
- 如果任一操作数的类型为double,则另一个操作数将转换为double。
- ...
答案 1 :(得分:-3)
好的0.0仍然是==到0
System.out.println(0 == 0.0); // equals true
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25