Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

java - Ternary operator

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 ?

public class Ternary
  {
public static void main(String args[])
     {
    int a = 5;
    System.out.println("Value is - " + ((a < 5) ? 9.9 : 9));
     }
  }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...