能不能骗到你?尽管来试试!一道java笔试题!public class Test
{
public static void main(String[] args)
{
    int a = 5;
    System.out.println("ddsadasa" + (a > 5 ? 9.0 : 9));
}}
运行结果是( )A ddsadasa9     B ddsadasa9.0     C   编译出错      D 以上答案都不对选了答案的,要说个理由,O(∩_∩)O哈哈~其实题目很简单的。
不用我多说,估计骗不了多少人。。
散分啦,散分啦,散分啦,大家顶啊。顶的人越少,你得到的分越多哦,O(∩_∩)O哈哈~

解决方案 »

  1.   

    a > 5 ? 9.0 : 9返回的永远是9.0,
    原因
    a>5时,返回9.0;
    a>=5时,9->9.0,整型自动转化为double,返回的还是9.0
      

  2.   

    B ddsadasa9.0  
    没发现什么特殊的地方,知道?:表达式怎么确定类型即可。
    记得Java Puzzlers这本书上有例子。
      

  3.   

    a > 5 ? 9.0 : 9返回的永远是9.0, 
    原因 
    a>5时,返回9.0; 
    a<=5时,9->9.0,整型自动转化为double,返回的还是9.0
      

  4.   

    B
    (a > 5 ? 9.0 : 9)
    因为9.0
    都自动转化为了Double
    所以返回9.0
    ddsadasa9.0
      

  5.   

    a <=5时,9->9.0,整型自动转化为double(为什么啊?)返回的还是9.0
      

  6.   

    B。貌似是scjp的题目,怎么说呢,a > 5 ? 9.0 : 9。会进入后面一个选项。但是由于前面一个选项是double型,所以后面那个也就会为了保持一致,保持double型。
      

  7.   

    9.0:9的时候会进行基本数据的转换~由低优先级向高优先级转换
     例如:
    public class Test1
    {
        public static void main(String[] args)
        {
            int a = 5;
            double b=1.0;      
            System.out.println(a+b);
        }}输出结果是6.0~~
      

  8.   

    好了顶选B。表达式制动转型了,转成double型了
      

  9.   

    很简单的[color=#FF0000][/color]
      

  10.   

    1,三元运算符运算顺序:右-->左
         +运算符运算顺序:左-->右
    2,三元运算符中的两个表达式中有一个是对象如String,则另一个自动封箱为对象
      若两个基本类型不能直接比较如boolean和别的类型,则两则都封箱;
    3,两个表达式都是可比较的基本数据类型时(不含boolean类型),
      遵从java数据类型转化规则;
    4,2个表达式中有一个char,而另一个是整形数据:
      当该整型数据指明数据类型时,遵从规则3;
      当该整型数据类型不明确指明类型时:
         当该值介于[0,65535]时可表示为char类型,则制动转化为char;
         当该值位于其他范围时,则转化为int或long然后根据规则3运算。
    有上面4条,则下面的结果就很容易理解了:int a = 6,b = 3;
    byte bt = 12;
    System.out.println(a > 5 ? 12 : 'a');//
    System.out.println(b > 5 ? 12 : 'a');//a
    System.out.println(a > 5 ? bt : 'a');//12
    System.out.println(b > 5 ? bt : 'a');//97
    System.out.println(a > 5 ? 911 : 'a');//Ώ
    System.out.println(b > 5 ? 911 : 'a');//a
    System.out.println(a > 5 ? 65535 : 'a');//
    System.out.println(b > 5 ? 65535 : 'a');//a
    System.out.println(a > 5 ? 65536 : 'a');//65536
    System.out.println(b > 5 ? 65536 : 'a');//97
    System.out.println(a > 5 ? 911L : 'a');//911
    System.out.println(b > 5 ? 911L : 'a');//97
    System.out.println(a > 5 ? 911.1 : 'a');//911.1
    System.out.println(b > 5 ? 911.1 : 'a');//97.0
    System.out.println(12 + (a > 5 ? 911 : 'a'));//923
    System.out.println(12 + (b > 5 ? 911 : 'a'));//109
    //System.out.println(12 + (a > 5 ? 911 : "a"));//error
    //System.out.println(12 + (b > 5 ? 911 : "a"));//error
    System.out.println("12" + (a > 5 ? 911 : 'a'));//12Ώ
    System.out.println("12" + (b > 5 ? 911 : 'a'));//12a
    System.out.println("12" + (a > 5 ? 911 : "a"));//12911
    System.out.println("12" + (b > 5 ? 911 : "a"));//12a
    System.out.println(a > 5 ? 911 : "a");//911,JDK50+
    System.out.println(b > 5 ? 911 : "a");//a,JDK50+
    System.out.println(a > 5 ? 911.1 : "a");//911.1,JDK50+
    System.out.println(b > 5 ? 911.1 : "a");//a,JDK50+
    System.out.println(a > 5 ? true : 'a');//true,JDK50+
    System.out.println(b > 5 ? true : 'a');//a,JDK50+
    System.out.println(a > 5 ? true : 11);//true,JDK50+
    System.out.println(b > 5 ? true : 11);//11,JDK50+
    //System.out.println(11+(a > 5 ? true : 11));//error
    //System.out.println(11+(b > 5 ? true : 11));//error
      

  11.   

    有个专门的名词叫双目数值类型提升(binary numeric promotion)在双目数值类型提升的情况下,如果任意一个操作数是 float 类型,那另外一个会被转换成为 float 类型 
      

  12.   

    下面是 Java Language Specification 上关于条件表达式的说明_____如果第二和第三个操作数在可以转换为数值类型时,会有以下几种情况:
    ________操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Shoft 类型,那么
    _________ 这个表达式就是 shoft 类型
    ________操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个
    _________ 是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型
    ________操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来
    _________ 表示,那么这个表达式就是 byte 类型
    ________操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型
    _________ 来表示,那么这个表达式就是 short 类型
    ________操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类
    _________ 型来表示,那么这个表达式就是 char 类型
    ________否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表
    _________ 达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和
    _________ 值集转换(value set conversion)这里只是部分的,更多的看 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#341287这个题目会用到最后一点——双目数值类型提升。所谓的双目数值提升通俗点的描述是:
    两个数根据一定的规则把其中一个的类型转为另一个类型。根据 Java Language Specification 中关于双目数值提升的描述(部分)http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#170983_____如果任意一个操作数是 float 类型,那另外一个会被转换成为 float 类型
      

  13.   

    呵呵,说错了,25、26 楼最后一行更正一下:如果操作数中的一个是 double 类型,那么另外一个就会被转换为 double 类型
      

  14.   

    慢慢学习PS: 
    我的目标是 ----> ^_^
      

  15.   

    float price=2.570f;
    System.out.println(""+price);
    double distandce=123.560d;
    System.out.println(distandce);
    输出结果:
    2.57
    123.56看看这个是为什么?