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

问题描述

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

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

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

解决方案

三目运算符也称三元一次运算符,他的规则是 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。

解决方案二:

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

 Double o1 = true==true ? new Integer(1) : new Double(2.0);

解决方案三:

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

解决方案四:

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

解决方案五:

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

解决方案六:

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

解决方案七:

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

解决方案八:

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

解决方案九:

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

时间: 2024-10-30 23:05:41

java-关于三目运算的奇怪之处。的相关文章

我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换

今天看到两个面试题,居然都做错了.通过这两个面试题,也加深对三目运算是的自动类型转换的理解. 题目1.以下代码输出结果是(). public class Test { public static void main(String[] args) { int a=5; System.out.println("value is :"+((a<5)?10.9:9)); } } A.编译错误     B.10.9           C.9           D.以上答案都不对 我不假

浅谈Java三目运算_java

三目条件运算公式为 x?y:z  其中x的运算结果为boolean类型,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值 例:String s="";     String x="默认值";     s=s.isEmpty()?x:s; 这段代码的意思是:先判断s是否为空(结果是空),然后执行s=x,即执行x 再来一个复杂点的 class Dates { int year,month,day; Dates(int x,i

Python中实现三目运算的方法

  这篇文章主要介绍了Python中实现三目运算的方法,本文用and/or 运算符模拟实现三目运算,需要的朋友可以参考下 C语言中三目运算符 代码如下: expression ?expr1:expr2; //expression 为真则取表达式expr1的值,否则取expr2的值 python三目实现方法: (1) expr=判断表达式 and expr1 or expr2 判断表达式为真,此时如果expr1为真则expr=expr1,为假则变成False or expr2,expr=expr2

mysql三目运算使用示例

网站业务需要按实际成立金额排序,要用的有三个字段:price(商品价格),pay(实际支付价格),num(购买数量).如果商品有优惠就是按pay价格成立,也就是pay>0,如果没有优惠就是实价成交,pay=0.所以我们要的实际价格就是如果pay>0就是pay*num,否则就是price*num.这也就是要用到三目运算pay>0?pay:price. 那么mysql有三目运算符吗 可以用case when,这个mysql应该支持:select a,case when b is null t

Python基础(一)变量,用户交互,if else , while ,for,三目运算

Python3 1.变量无须指定类型,python 默认变量类型微str ```name = "hello"``` 查看变量类型函数 变量的强制转换 age = int(age)``` 2.用户交互 ```name = input("please input a name :") #input会阻塞,等待用户输入完成回车``` 3.if else if 条件(and | or): #注意行尾是冒号,与逻辑写成and 代码块 #缩进4个空格位 elif 条件: 代码块

Javascript中三目运算用法例子

在JavaScript中,除了 if ... else 和 switch 语句,还有一个唯一的三目运算符 ? ... : ,也可用于简单的选择结构. 语法: conditions ? statementA : statementB ; 上述语句,首先判断条件condition,若结果为真则执行语句statementA,否则执行语句statementB. 值得注意的是,由于 JavaScript 脚本解释器将分号" ; "作为语句的结束符,statementA 和 statementB

使用Python的判断语句模拟三目运算_python

下面说的和三目运算有点相似,但又不一样,实在不知道该如何拟定标题,先就是这个标题吧,大家都知道python中没有三目运算,但是and/or有点类似三目运算:and/or 单独使用表示逻辑关系与和或,也可以组和使用,用法如下and and前后如果某一个值为假(False, '', [], {}, None-)则返回第一个假值 如果所有值都为真则返回最后一个真值or 如果or任意一个值为真,则立刻返回这个值 如果所有值都为假,则or返回最后一个假值例子 result = 'test' and Tru

条件(三目)运算符 (?:)

条件|运算   根据条件执行两个语句中的其中一个. test ? 语句1 : 语句2 参数 test 任何 Boolean 表达式. 语句1 当 test 是 true 时执行的语句.可以是复合语句. 语句2 当 test 是 false 时执行的语句.可以是复合语句. 说明 ?: 运算符是 if...else 语句的快捷方式.它通常被用作较大表达式的一部分,而在此处使用 if...else 语句是不协调的.例如: var now = new Date();var greeting = "Goo

c++-关于三目表达式问题,运算顺序的问题

问题描述 关于三目表达式问题,运算顺序的问题 #include void main() { int a=1, b=2, c=3; cout<<(a coutb ? b-- : ++a)< coutb ? ++a : ++b)< coutb ? a : b>c ? b : c)<<endl; } 给出这一段代码,第一行和第二行输出为1和2我能理解,但是为什么第三行输出为6?还有第四行为什么也是6? 求大神指点一二,小弟在此谢过! 解决方案 第一行cout之后,输出1