昆明java培训
达内昆明广州春城路

18487146383

热门课程

三元操作符的类型务必一致

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训机构的老师知道三元操作符是if-else的简化写法,在项目中使用它的地方很多,也非常好用,但是好用又简单的东西并不表示就可以随意使用,看看如下代码:

1 public static void test03() {

2        int i = 80;

3        String str = String.valueOf(i < 100 ? 90 : 100);

4        String str1 = String.valueOf(i < 100 ? 90 : 100.0);

5        System.out.println("两者是否相等:" + str.equals(str1));

6    }

分析一下这段程序,i是80,小于100,两者的返回值肯定都是90,再转成String类型,其值也绝对相等,毋庸置疑的。嗯,分析的有点道理,但是变量str中的三元操作符的第二个操作数是100,而str1中的第二个操作数是100.0,难道木有影响吗?不可能有影响吧,三元操作符的条件都为真了,只返回第一个值嘛,于第二个值有毛线关系,貌似有道理。

运行之后,结果却是:"两者是否相等:false",不相等,why?

问题就出在了100和100.0这两个数字上,在变量str中,三元操作符的第一个操作数90和第二个操作数100都是int类型,类型相同,返回的结果也是int类型的90,而变量str1中的第一个操作数(90)是int类型,第二个操作数100.0是浮点数,也就是两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定,不可能条件为真时返回int类型,条件为假时返回float类型,编译器是不允许如此的,所以它会进行类型转换int类型转换为浮点数90.0,也就是三元操作符的返回值是浮点数90.0,那么当然和整型的90不相等了。这里为什么是整型转成浮点型,而不是浮点型转成整型呢?这就涉及三元操作符类型的转换规则:

若两个操作数不可转换,则不作转换,返回值是Object类型;

若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字转换,int转为long,long转为float等;

若两个操作数中有一个是数字S,另外一个是表达式,且其类型标志位T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T的范围,则T转换为S;

若两个操作数都是直接量数字,则返回值类型范围较大者。

知道什么原因了,相应的解决办法也就有了:保证三元操作符中的两个操作数类型一致,避免此错误的发生。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:莫让常量蜕变成变量
下一篇:避免带有变长参数的方法重载

达内Java开发学员易帅哥月薪7k入职科蓝软件

达内java程序员掌握技术就掌握铁饭碗

Java面试3大经验,线程间协作原理

iPhone摄像头发展史一步一个脚印

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货