public class Hengsun {
   public static void main(String[] args) {
      int x =4;
      System.out.println((x>4)?99.9:9);
   }
}
为什么结果是9,而不是9.0呢???

解决方案 »

  1.   

    因为int是整型的啊 肯定不会带小数点的啊!你再看下java的那些数据类型吧
      

  2.   

    三元运算符要保证左右对等的,左边是double右边也会自动转型成double,9.0是没问题的
    只是不知道lz是怎么执行出9的……jdk版本是啥?
      

  3.   

    java 要求三目操作时后两个参数必须是相同的类型,也就是说:System.out.println((x>4)?99.9:9);所以这里的参照类型是 99.9,输出 9 时会转换成 99.9 所指示的 double 类型
      

  4.   

    1.如果第二个和第三 个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。  
     
    2 如果一个操作数的类型是 T,T 表示byte、short 或 char,而另 一个操作数是一个int 类型的常量表达式,它的值是可以用类型 T 表示的,那么条件表达式的类型就是 T。 
      
    3 否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。 
      

  5.   

    我的理解是99.9的优先级高于int类型,在计算的过程中会将所有的数值类型隐式转换成float类型的,所以最后打印出来的是9.0