今天看了一下java的显式转换和隐式转换,因为对这一块有些忘了,在看到混合算术表达式时看到这样一段话,如果其中一个操作数是double
类型,就在进行运算之前将另一个转换为double类型,看到这句话时,我想到如果double a=3.9,double b=2.2,然后int i=(int)a+b,结果会
是什么?结果是错误,因为将double转换到int会有丢失,也就是说这个式子的右边依然是double类型,然后我想这是不是说a在显示转换为
int类型后,然后由于b还是double类型,所以按照上述规则,a又转换为double类型,然后我就想a是不是又变为3.9了,然后我将式子变为
int i=(int)((int)a+b);,结果答案是5,也就是说a其实还是3,然后我想难道这个规则是只适合隐式转换吗?也就是说遇到显示转换时,这
个规则就不成立,不然为什么a没有变成3.9呢?然后我想到其实答案应该是这样的,a经过显示转换的确变成了3,但是这个规则同样适用有显
示转换的表达式,也就是说在进行运算之前,a变成了double类型,但是值却是3.0,所以结果是5,而不是6,也许在显示转换时,将int用括
号括起来(也就是写成(int)a+b)的一个原因可能是让a先变成int类型,毕竟括号内的先运算。