A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周世阳 中级黑马   /  2012-8-19 03:36  /  1940 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int x=3;
  2.         System.out.println((x>3)?1.1:1);
复制代码
输出为1.0
1.1或3与1没有任何的加减乘除运算,只是一个条件表达式,输出1才是合理的为什么输出的是1.0???

5 个回复

正序浏览
  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.          
复制代码
回复 使用道具 举报
首先 ?: 这是个运算符,既然是运算,那么就涉及参与运算数据的数据类型。1.1是double类型1是int类型,运算时会有个类型的自动提升,结果是double类型,所以输出是1.0
回复 使用道具 举报
楼上原因正确,补充一下,不是因为定义的x的类型的原因,即
float x=3;
System.out.println((x>3)?1.1:1);
还是会输出1.0。
比较的是(x>3)?1.1:1。1.1和1比较,自动强制转型
回复 使用道具 举报
01.int x=3;

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

(x>3)?1.1:1   因为?后边的值为double类型的  所以根据double类型输出   
输出结果 和  运算结果都是根据最高的类型输出的
回复 使用道具 举报
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:
   希望你结合例子能理解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马