【发布时间】:2013-11-12 19:41:47
【问题描述】:
在下面的代码中,我有两个相同的条件赋值操作,一个返回 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
为什么完全相同的表达式会返回两个不同的东西?
【问题讨论】:
-
@RichardTingle 在这里我们都认为
?:的行为与 if 语句相同 -
我几乎认为这是一个简单 if 语句的更紧凑的版本!
-
if语句和三元运算符?:是不同的野兽。前者是一个陈述,因此没有价值;后者是一个表达式,因此有一个值,并且该值需要一个类型——选择的类型基本上是适用于三元的两个“分支”的最具体的类型。 -
看懂了就说得通了,但我看得出来是多么容易被它烫到