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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨千里 中级黑马   /  2012-9-13 22:56  /  1777 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨千里 于 2012-9-15 13:21 编辑

public  class   Conditional{
             public  static  void  main(String  args[ ]){
                     int  x=4;                       //定义x为int类型?
                     System.out.println("value  is "+ ((x>4) ? 99.9:9));//但是结果却是9.0,为什么?
}

评分

参与人数 1黑马币 +3 收起 理由
唐志兵 + 3 哥们,来点高质量的问题或者 总结也行。.

查看全部评分

9 个回复

倒序浏览
强制转换了
回复 使用道具 举报
怎么强制转换的?
回复 使用道具 举报
((x>4) ? 99.9:9));//这是三元运算,后面两个部分类型必须相同,99.9是double类型,9是int类型,所以9被虚拟机自动转换成了double型,也就是9.0
回复 使用道具 举报
Java中的三元表达式有字符强转的功能,
会把后面的强转成和前面一样的类型。
希望对你有帮助

回复 使用道具 举报
本帖最后由 冯海霞 于 2012-9-13 23:09 编辑
杨千里 发表于 2012-9-13 23:01
怎么强制转换的?


99.9是默认的double类型,9是int型。比较的时候9会自动提升成double型

就像老师举得例子一样

2.png (31.78 KB, 下载次数: 30)

2.png
回复 使用道具 举报
学习了!!
回复 使用道具 举报
楼上都是正解,这个好 ,赞下!{:soso_e179:}
回复 使用道具 举报
怎么不是9呢?
哥们  三元运算符呀,  (表达式1)? 表达式2:表达式3;
如果表达式1为true  则结果是表达式2的值。
如果表达式1为false,则结果是表达式3的值

4不大于4,所以是9.0
但是9.0却不是9怎么回事呢?  这个是因为参考了表达式2的类型了。

举个例子:

char x = 'X';  
int i = 0;  
System.out.println(true ? x : 0);  
System.out.println(false ? i : x);  

            char x = 'X';
            int i = 0;
            System.out.println(true ? x : 0);
            System.out.println(false ? i : x);运行这段结果,得到的却是:X88,可以看到三元运算符的结果,与表达式2的类型有直接的关系。

对于第一个表达式:true ? x :0 因为x的类型为char,当表达式为真的时候,结果类型为char,得到的结果是X。

对于第二个表达式:false ? i : x,因为i的类型为整型,当表达式为false的时候,结果类型为int,于是char向上转型为整型,输出88。
回复 使用道具 举报
学习了,以前还真没考虑过这个问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马