小二话不多说,以图为例。
1. 3*0.1==0.3
神奇吗?各位。
解析:因为有些浮点数不能完全精确的表示出来,如下代码:
System.out.println(3 * 0.1);
返回的结果是:0.30000000000000004。
2、 ((x>4) ? 99.9 : 9)
int x = 4;
System.out.println("value is " + ((x>4) ? 99.9 : 9));
返回值是啥??? 是9吗???
哈哈,是9.0。
解析:三元表达式中,数据类型的变量与未定义变量的数值,结果自动转换为精度高的!!!!
//规则1,定义了数据类型的变量与未定义变量的数值,结果自动转换为精度高的
System.out.println(2==2?i:9.0);
//jvm给数值分配的数据类型,98并不是int类型的,而是byte/short,故结果会变为ASCII码98对应的字符
System.out.println(2==2?98:a);
//规则2,两个已经定义数据类型的变量,结果自动转换为精度高的
System.out.println(2==2?a:i);
//规则3,两个未定义的数值,结果自动转换为精度高的
System.out.println(2==2?99:9.0);
System.out.println(2==2?99:'b');
上述代码的执行结果为: 96.0
b
97
99.0
c