黑马程序员技术交流社区
标题:
正在复习类型转换
[打印本页]
作者:
杨千里
时间:
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)
下载附件
2012-9-13 23:09 上传
作者:
淡水河谷
时间:
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