2 qq 31807519 qq_31807519 于 2016.03.11 13:35 提问

关于三目运算的奇怪之处。

Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);

    结果为什么是1.0?新手上路,求高手解答。

9个回答

xionglangs
xionglangs   Rxr 2016.03.11 16:38
已采纳

三目运算符也称三元一次运算符,他的规则是 x?y:z,其中x是boolean值,也就是个判断,如果为真(true)值就取y,如果为假(false),值就取z,他也可以写成if(x){y}esle{z};再来看你这里的Object o1 = true ? new Integer(1) : new Double(2.0);其实你这里面包含一个三元一次运算符和一个赋值运算,因为三目运算符的优先级高于赋值运算符图片说明,所以先运行三目运算符,得到new Integer(1) ,等式就变成了Object o1 =new Integer(1) ,就得到o1new了个Integer对象,赋值为1,所以打印的就是1。

qq_31807519
qq_31807519 大哥,我再看了一下,你貌似没说对啊。结果是1.0不是1,有自动的类型转换的。不过我已经懂了,还是谢了。
接近 2 年之前 回复
qq_31807519
qq_31807519 只能采纳一个,其实大家都说的很好,已经弄明白了。谢谢大家!
接近 2 年之前 回复
qq_31807519
qq_31807519 谢谢,讲解的很详细。受教了。
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.11 14:21

当然是1.0,首先三目的判断条件是 true,然后整表达式有 Double,所以 Object 被隐式转换为Double,否则有数据丢失,编译器不会这样做。最终机器运行的表达式应该是这样的

 Double o1 = true==true ? new Integer(1) : new Double(2.0);
qq_31807519
qq_31807519 已经懂了,非常谢谢!
接近 2 年之前 回复
John_ToStr
John_ToStr   Rxr 2016.03.11 13:46

Object o1 = true 为真, 则创建整形赋值为1, 否则创建double类型并且赋值2.0 , 但输出o1仍然是TRUE, 也就是说他的值是不会因为3目运算符而变的

John_ToStr
John_ToStr 回复洛烨:看错了,不好意思...
接近 2 年之前 回复
qq_31807519
qq_31807519 请您看清楚我问的问题。
接近 2 年之前 回复
xzchaoo
xzchaoo   2016.03.11 14:03

还是会进行类型转换的吧, 虽然你用的是基本类型的包装类:
Integer o1 = true ? new Integer(1) : new Double(2.0); 这个是错的
Double o1 = true ? new Integer(1) : new Double(2.0); 这个是对的

qq_31807519
qq_31807519 受教
接近 2 年之前 回复
xzchaoo
xzchaoo   2016.03.11 14:04

Object o1 = true ? (Object) new Integer( 1 ) : (Object) new Double( 2.0 );
System.out.println( o1.getClass().getName() );
你可以尝试将某一个变量强转成Object 这样o1的类型就是Integer了

qq_31807519
qq_31807519 谢谢,说得很好。
接近 2 年之前 回复
dcxy0
dcxy0   Ds   Rxr 2016.03.11 15:39

true就直接走第一个了啊,http://blog.jobbole.com/93511/

qq_32927563
qq_32927563   2016.03.11 16:02

明显低升高,自动转了数据类型

qq_32927563
qq_32927563   2016.03.11 16:03

明显低升高,自动转了数据类型

qq_24334403
qq_24334403   2016.03.11 17:09

2个操作数从byte,short,char,int 4个中选2个时,能用小的类型表示大的类型,输出结果的类型是小的类型,如果包括一个long,float,double操作数,那么输出结果的类型是大的类型

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!