Ternary operator

前端 未结 5 1662
野性不改
野性不改 2020-12-19 08:44

Why the output of following code is 9.0 and not 9 ? If ternary operator is nothing but short form of if-else branch then why java compiler is promoting int to double ?

5条回答
  •  孤城傲影
    2020-12-19 09:03

    If ternary operator is nothing but short form of if-else branch then why java compiler is promoting int to double ?

    A conditional expression has a single type, which both the second and third operands are converted to as necessary. The JLS gives the rules determining the expression type, which are slightly complicated due to auto-unboxing.

    The conditional operator is sort of just shorthand for an if/else construct, but not the sort of shorthand I think you expected. So your code is equivalent to this:

    double value;
    if (a < 5) {
        value = 9.9;
    } else {
        value = 9;
    }
    System.out.println("Value is - " + value);
    

    It's not short for:

    if (a < 5) {
        System.out.println("Value is - " + 9.9);
    } else {
        System.out.println("Value is - " + 9);
    }
    

    For more details, see section 15.25 of the Java Language Specification.

提交回复
热议问题