我试图从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都必须可以给它分配)。

打印运行时类型为ObjectInteger会为您提供5,而打印Double会为您提供5.0

10-08 00:19