黑马程序员技术交流社区

标题: 正在复习类型转换 [打印本页]

作者: 杨千里    时间: 2012-9-13 22:56
标题: 正在复习类型转换
本帖最后由 杨千里 于 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,为什么?
}

作者: 打工人    时间: 2012-9-13 23:00
强制转换了
作者: 杨千里    时间: 2012-9-13 23:01
怎么强制转换的?

作者: 孙岳    时间: 2012-9-13 23:04
((x>4) ? 99.9:9));//这是三元运算,后面两个部分类型必须相同,99.9是double类型,9是int类型,所以9被虚拟机自动转换成了double型,也就是9.0
作者: 李菁    时间: 2012-9-13 23:05
Java中的三元表达式有字符强转的功能,
会把后面的强转成和前面一样的类型。
希望对你有帮助


作者: 打工人    时间: 2012-9-13 23:08
本帖最后由 冯海霞 于 2012-9-13 23:09 编辑
杨千里 发表于 2012-9-13 23:01
怎么强制转换的?


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

就像老师举得例子一样

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

2.png

作者: 淡水河谷    时间: 2012-9-13 23:15
学习了!!
作者: 皮卫凯    时间: 2012-9-13 23:18
楼上都是正解,这个好 ,赞下!{:soso_e179:}
作者: 杨卫腾    时间: 2012-9-13 23:32
怎么不是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。

作者: 高俊杰    时间: 2012-9-13 23:48
学习了,以前还真没考虑过这个问题。




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