这个问题很有意思,我也不知道答案,但是下面的代码输出却是5
public class q{
public static void main(String args[]){
     int a = 5;
System.out.println("Value is - " + ((a < 5) ? 4 :5));
}
}比较一下就知道,或许结果的取值与?后面的值有关了。
只能是猜测了,望有高手指点了

解决方案 »

  1.   

    (a < 5) ? 4 :5)
    java中的三元运算符是指:
    如果?(在此式中为a<5)前的判别式返回值为true,则此运算式的值为:之前的数或式子(在此式中为4);?(在此式中为a<5)前的判别式返回值为false,则此运算式的值为:之后的数或式子(在此式中为5)。
      

  2.   

    相当于:
    if(a<5){
      System.out.println("Value is - " + 4));
    }else{
      System.out.println("Value is - " + 5));
    }
      

  3.   

    ((a < 5) ? 4.6 :5))
    经过这一条语句,你的5已经自动转换为double型了,因为4.6是double型的
      

  4.   

    java 计算时默认使用的是int类型。
    然后它会以byte -> short -> int -> long -> float ->double 这个方向对结果进行自动转换。如要反过来要显式转换。
      

  5.   

    虽然结果使这样的
    但我很奇怪,他怎么会根据?后面的转型呢?
    要知道(a<5)返回false后是不会执行?后面的表达式的
    如:      int a = 5;
         int b = 6;
    System.out.println("Value is - " + ((a < 5) ? ++b : ++a));
    System.out.println(a);
    System.out.println(b);
    结果是a = 6; b = 6;
    也就是说++b没有执行,不明白,他的输出结果怎么又会根据?后面的值转型呢?
      

  6.   

    这是不一样的,因为a,b你声明了
    上面的4.6和5没有声明,java把没声明的拿去做处理,根据我上面说的顺序转型(根据最“大”类型)
      

  7.   

    三目运算符是一个整体,后面有double型的
    自然结果为double型的
    自动转换和显式转换的优先级是一样的,都是强制类型转换
    优先级低于一元运算符(++,--),高于二元运算符(+,-等)
      

  8.   

    例如:
    int a=5;
    float f=(float)a/2;    //显式转换,高于/运算,先将操作数转换成float,再作/运算