一尘不染

三元运算符导致的意外类型

java

我正在尝试编写一种获取a的方法,以double验证数字是否在点后有东西,如果有double,则返回a ,如果没有则返回a int

public class Solution {
    public static void main(String[] args) {
        double d = 3.000000000;
        System.out.println(convert1(d));
        System.out.println(convert2(d));
    }

    static Object convert1(double d) {
        if(d % 1 == 0)
            return (int) d;
        else
            return d;
    }

    static Object convert2(double d) {
        return ((d%1) == 0) ? ((int) (d)) : d;
    }
}

输出:

3
3.0

因此,我想要的一切都发生在method中convert1(),但没有发生在method中convert2()。这些方法似乎必须完成相同的工作。但是我做错了什么?


阅读 357

收藏
2020-09-08

共1个答案

一尘不染

正如其他答案所指出的,此行为是因为三元表达式的两个可能结果都必须具有相同的类型。

因此,您要做的所有事情都可以使三元版本的工作方式与convert1()将强制转换int为的方式相同Object

static Object convert2(double d) {
    return ((d % 1) == 0) ? ((Object) (int) (d)) : d;
}
2020-09-08