我试图从fractional
中删除double
部分,以防整个使用:
(d % 1) == 0 ? d.intValue() : d
并遇到了我不理解的以下行为:
public static void main(String[] args) {
Double d = 5D;
System.out.println((d % 1) == 0); // true
System.out.println((d % 1) == 0 ? d.intValue() : "not whole"); // 5
System.out.println((d % 1) == 0 ? d.intValue() : d); // 5.0
}
如第三行所示,即使满足
else
条件,运算符(operator)也会选择5.0
值-(d % 1) == 0
。这里发生了什么?
最佳答案
三元条件运算符的返回类型必须使第2和第3个操作数都可以分配给它。
因此,在第二种情况下,运算符的返回类型为Object
(因为d.intValue()
和"not whole"
都必须可以分配给它),而在第三种情况下,它是Double
(因为d.intValue()
和d
都必须可以给它分配)。
打印运行时类型为Object
的Integer
会为您提供5
,而打印Double
会为您提供5.0
。