• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Liutauras Vilda
  • Henry Wong
  • Devaka Cooray
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • Al Hobbs
  • Carey Brown
Bartenders:
  • Piet Souris
  • Mikalai Zaikin
  • Himai Minh

about ternary operator

 
Ranch Hand
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
int i=5;

System.out.println(((i>5)?9.9:9));

can anyone clear my doubt why the answer is 9.0 ?
 
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi shankar,

The condition expression returns the value according to the first one that is in this case 9.9 .If you change it to some other data type then the return will also be according to it.So the return is in the format of the first one


Just try this



Now you can understand i think!!!
 
shankar reddy
Ranch Hand
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
thanks for reply.

say
it i =5;
if(i>5)
{
System.out.println("inside if");
}
else
{
System.out.println("inside if");
}

in above scenario is there any chance of entering into the if block.
not at all.

so how it is taking floating value instead of int .

could you clarify it again.
 
Ganesh Kumar
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
No it wont.In ternary operator it changes because you did not say the return type.Here you specified as int so it value wont get changed
 
shankar reddy
Ranch Hand
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
sorry Ganesh Kumar...
i am not getting your answer
 
shankar reddy
Ranch Hand
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
sorry Ganesh Kumar...
i am not getting your answer
 
Ranch Hand
Posts: 3389
Mac MySQL Database Tomcat Server
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator


Originally posted by Ganesh kumar :
If you change it to some other data type then the return will also be according to it.So the return is in the format of the first one



As Ganesh kumar told and as per the JLS, the "Binary Numeric Promotion" is applied, and thats why you get the floating point value.

The JLS in the above link says,


When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value of a numeric type, the following rules apply, in order, using widening conversion (�5.1.2) to convert operands as necessary:

  • If either operand is of type double, the other is converted to double.
  • Otherwise, if either operand is of type float, the other is converted to float.
  • Otherwise, if either operand is of type long, the other is converted to long.
  • Otherwise, both operands are converted to type int.


  • The original link to the topic is here for the Conditional Operators in JLS.

    HtH.
    [ July 09, 2007: Message edited by: Raghavan Muthu ]
     
    Ranch Hand
    Posts: 125
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    Hi, Shankar.

    To simplify what others have listed here, your ternary expression is of the format:

    integer expression ? double value : integer value

    Since one of the result values is a double, the other will be treated as a double. If your expression was of the format

    int i = 5;
    if(i > 5) ? 10 : 9;

    Then you would see 9 printed out.

    J
     
    Bring out your dead! Or a tiny ad:
    Free, earth friendly heat - from the CodeRanch trailboss
    https://www.kickstarter.com/projects/paulwheaton/free-heat
    reply
      Bookmark Topic Watch Topic
    • New Topic