Java条件赋值中的类型错误

时间:2013-11-01 15:13:29

标签: java conditional-operator

在下面的代码中,我有两个相同的条件赋值操作,一个返回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

为什么完全相同的表达式返回两个不同的东西?

2 个答案:

答案 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