首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中使用if与三元运算符时返回类型“错误”

在Java中使用if与三元运算符时返回类型“错误”
EN

Stack Overflow用户
提问于 2012-08-24 19:57:20
回答 1查看 529关注 0票数 17

在下面的类中,两个方法的返回类型与三元运算符的想法不一致:

代码语言:javascript
复制
return condition?a:b;

等同于

代码语言:javascript
复制
if(condition) {
    return a;
} else{ 
    return b;
}

第一个返回一个双精度型,第二个返回一个长整型:

代码语言:javascript
复制
public class IfTest {
    public static Long longValue = 1l;
    public static Double doubleValue = null;

    public static void main(String[] args) {
        System.out.println(getWithIf().getClass());// outpus Long
        System.out.println(getWithQuestionMark().getClass());// outputs Double
    }

    public static Object getWithQuestionMark() {
        return doubleValue == null ? longValue : doubleValue;
    }

    public static Object getWithIf() {
        if (doubleValue == null) {
            return longValue;
         } else {
            return doubleValue;
        }
    }
}

我可以想象这与编译器狭义地转换getWithQuestionMark()的返回类型有关,但是这种语言明智吗?这肯定不是我所期望的。

欢迎有任何见解!

编辑:下面有非常好的答案。此外,@sakthisundar引用的以下问题探索了在三元运算符中发生的类型提升的另一个副作用:Tricky ternary operator in Java - autoboxing

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12108998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档