龙空技术网

每天进步一点点,三元操作符有80% 人会用,不理解,你是否中枪?

嘟宝与嘟爸 215

前言:

现时姐妹们对“操作符和操作数类型不符”大约比较注意,看官们都想要学习一些“操作符和操作数类型不符”的相关文章。那么小编同时在网络上汇集了一些对于“操作符和操作数类型不符””的相关文章,希望大家能喜欢,看官们一起来学习一下吧!

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

分析一下这段程序,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;

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

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

标签: #操作符和操作数类型不符