You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中double转int后返回值变为Double类型的问题求助

三元运算符类型提升导致返回类型不符合预期的解决方法

问题原因

你的代码中,三元条件运算符?:会对两个结果分支执行类型统一提升:

  • keepDecimals为true时返回的nb是double类型
  • 为false时返回的(int) nb是int类型
    根据Java的类型转换规则,int会被自动提升为double,因此整个表达式的结果类型是double。当返回这个值时,double会自动装箱为Double对象,而非预期的Integer。

解决方案

有两种可靠的修复方式:

方案1:显式返回包装类型

将int分支的结果转为Integer包装类,强制三元运算符统一为Object类型,避免自动类型提升:

private static Object getJavaValue(Supplier<Double> supplier, boolean keepDecimals) {
    double nb = supplier.get();
    return keepDecimals ? nb : Integer.valueOf((int) nb);
}

方案2:替换为if-else语句

if-else分支可以独立返回不同的基本类型,各自自动装箱为对应的包装类,不会触发类型提升:

private static Object getJavaValue(Supplier<Double> supplier, boolean keepDecimals) {
    double nb = supplier.get();
    if (keepDecimals) {
        return nb;
    } else {
        return (int) nb;
    }
}

验证结果

修改后运行你的测试代码,当keepDecimals为false时,控制台会输出:
class java.lang.Integer with value 34

内容的提问来源于stack exchange,提问作者Matteo NNZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:25:02