黑马程序员技术交流社区

标题: 条件表达式问题 [打印本页]

作者: 周世阳    时间: 2012-8-19 03:36
标题: 条件表达式问题
  1. int x=3;
  2.         System.out.println((x>3)?1.1:1);
复制代码
输出为1.0
1.1或3与1没有任何的加减乘除运算,只是一个条件表达式,输出1才是合理的为什么输出的是1.0???


作者: 杨习平    时间: 2012-8-19 04:23
A:数据类型转换
                强制转换
                        从大到小的时候,需要使用强制转换。但是可能损失精度。
                自动转换
                        从小到大,会自动转换
                        byte,short,char -- int - long - float - double
        这里说的很清楚,从大到小的时候,需要使用强制转换。但是可能损失精度。从小到大,会自动换,
         根据你的这个题目:     int x=3;

                                                  System.out.println((x>3)?1.1:1);

                              这个java语句中联合三元运算符,  即    A条件B?A : B ,如果A为真  就返回A ,   
                        反之返回B。你定义的是int 3和 3 比较 3>3当然是false ,所以返回1 ,又因为int 和
                double 型的是不同类型,所以要有一个int ------->double 的自动转化,转化double ,所以是int 1----->double 1.0,的到结果就是  1.0:
   希望你结合例子能理解。
作者: 方志亮    时间: 2012-8-19 08:08
01.int x=3;

02. System.out.println((x>3)?1.1:1);

(x>3)?1.1:1   因为?后边的值为double类型的  所以根据double类型输出   
输出结果 和  运算结果都是根据最高的类型输出的
作者: 胡文凡    时间: 2012-8-19 08:10
楼上原因正确,补充一下,不是因为定义的x的类型的原因,即
float x=3;
System.out.println((x>3)?1.1:1);
还是会输出1.0。
比较的是(x>3)?1.1:1。1.1和1比较,自动强制转型
作者: 邹海洋    时间: 2012-8-31 14:59
首先 ?: 这是个运算符,既然是运算,那么就涉及参与运算数据的数据类型。1.1是double类型1是int类型,运算时会有个类型的自动提升,结果是double类型,所以输出是1.0
作者: 芦曦    时间: 2012-8-31 17:00
  1. int x=3;
  2.           System.out.println((x>3)?1.1:1);//[color=Red]这句输出语句的意思是:判断x的值,如果x的值大于3,那么输出 1.1:1  中的前者也就是1.1,反之则输出后者1,那么又因为1.1是double类型 1是int类型,所以运算时会有个类型转换,输出的结果就是1.0了。[/color]
  3.          
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2