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
相关产品推荐
相关产品推荐

