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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 幻之记忆 中级黑马   /  2015-11-5 20:23  /  829 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
为什么输出会转变类型

11 个回复

倒序浏览
三元运算符的数据类型必须统一,第二个是double,后面的也变成double了
回复 使用道具 举报
系统自动给你提升类型double要比int类大
回复 使用道具 举报
260744042 发表于 2015-11-5 20:35
三元运算符的数据类型必须统一,第二个是double,后面的也变成double了

为什么要统一,这样定义的目的何在,或者说为了规避什么样的bug
回复 使用道具 举报
学习了,以前都不知道三元运算符后面数据类型要统一
回复 使用道具 举报
三元运算符类型必须统一,小存不了大类型,如果你定义一个 int 类型的变量是无法接受D的值得
回复 使用道具 举报
余旋 发表于 2015-11-7 22:57
学习了,以前都不知道三元运算符后面数据类型要统一

应该就是这样了
回复 使用道具 举报
数据类型不一样,要转的了
回复 使用道具 举报
第一次输出9.0 是double 类型.(就近原则) 第二次是i是inint类型的, 所以输出最后一起的输出结果是 9.0   9.  因为你吧 i  d的位置进行了对调
回复 使用道具 举报 1 0
迷茫不堪的年纪 发表于 2015-11-10 01:01
第一次输出9.0 是double 类型.(就近原则) 第二次是i是inint类型的, 所以输出最后一起的输出结果是 9.0   9. ...

你说的我愣是没看明白
回复 使用道具 举报
三木运算总是返回第一个的类型值   例如  a > b ? c : d   总是返回的 c 的类型 ;根本不是什么double字节长    楼主有时候不要只听别人说     自己还有去试试     你把 d 和 i 对调   打印的就是 9

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

反正就是自己多试试   
回复 使用道具 举报
小笨笨天 发表于 2015-11-11 00:54
三木运算总是返回第一个的类型值   例如  a > b ? c : d   总是返回的 c 的类型 ;根本不是什么double字节 ...

不知道你是怎么弄出9 这个答案的,代码测试过的,看了你的回复后还特地重写测试了下,确实会强转类型,无论如何对换位置都是输出double类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马