黑马程序员技术交流社区

标题: 三元运算符 [打印本页]

作者: 幻之记忆    时间: 2015-11-5 20:23
标题: 三元运算符
class Demo {
        public static void main(String[] args) {
                int i = 9;
                double d = 5.0;
                System.out.println(9>99 ? d : i);//输出9.0
                if (i>d) {
                        System.out.println(i);//输出9
                }
        }
}
最终打印结果为
9.0
9
为什么输出会转变类型
作者: 260744042    时间: 2015-11-5 20:35
三元运算符的数据类型必须统一,第二个是double,后面的也变成double了
作者: 一个人走天下    时间: 2015-11-5 21:07
系统自动给你提升类型double要比int类大
作者: 幻之记忆    时间: 2015-11-7 22:41
260744042 发表于 2015-11-5 20:35
三元运算符的数据类型必须统一,第二个是double,后面的也变成double了

为什么要统一,这样定义的目的何在,或者说为了规避什么样的bug
作者: 余旋    时间: 2015-11-7 22:57
学习了,以前都不知道三元运算符后面数据类型要统一
作者: didixyy    时间: 2015-11-7 23:16
三元运算符类型必须统一,小存不了大类型,如果你定义一个 int 类型的变量是无法接受D的值得
作者: 幻之记忆    时间: 2015-11-9 23:48
余旋 发表于 2015-11-7 22:57
学习了,以前都不知道三元运算符后面数据类型要统一

应该就是这样了
作者: 唯我独赞mo    时间: 2015-11-10 00:04
数据类型不一样,要转的了
作者: 迷茫不堪的年纪    时间: 2015-11-10 01:01
第一次输出9.0 是double 类型.(就近原则) 第二次是i是inint类型的, 所以输出最后一起的输出结果是 9.0   9.  因为你吧 i  d的位置进行了对调
作者: 幻之记忆    时间: 2015-11-11 00:28
迷茫不堪的年纪 发表于 2015-11-10 01:01
第一次输出9.0 是double 类型.(就近原则) 第二次是i是inint类型的, 所以输出最后一起的输出结果是 9.0   9. ...

你说的我愣是没看明白
作者: 小笨笨天    时间: 2015-11-11 00:54
三木运算总是返回第一个的类型值   例如  a > b ? c : d   总是返回的 c 的类型 ;根本不是什么double字节长    楼主有时候不要只听别人说     自己还有去试试     你把 d 和 i 对调   打印的就是 9

第二个根本没有做类型转换    只要满足条件    定义什么类型就返回什么类型

反正就是自己多试试   
作者: 幻之记忆    时间: 2015-11-11 12:27
小笨笨天 发表于 2015-11-11 00:54
三木运算总是返回第一个的类型值   例如  a > b ? c : d   总是返回的 c 的类型 ;根本不是什么double字节 ...

不知道你是怎么弄出9 这个答案的,代码测试过的,看了你的回复后还特地重写测试了下,确实会强转类型,无论如何对换位置都是输出double类型




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