本帖最后由 OCTSJimmy 于 2014-7-5 18:43 编辑
通俗的将:假设,short是个2两碗,int是个4两的碗。首先声明short类型的变量s1,并赋值1,这并没有错。然而实际上,这个1也是int型的,但是这个赋值,会有个自动转换类型的过程。接着运算 s1 = s1 + 1,那么问题出现了,运算时,假如符号两侧的类型不同,将会自动提升类型,以便于不遗失精度。那么这句话中,s1是short型,数字1却是int型的,那么,编译器就自动的把s1中的值的类型强制提升为int型后,与1做运算,运算后的结果,则是提升类型后的结果,也就是这个结果是4两的碗,重赋值给2两的碗,自然报错:将会损失精度。
那么种情况:
s1 += 1 这个+=符号其实是一个符号——赋值符号。虽然再赋值前的求和中,类型被强制提升了,但是会像前面说的“首先”的情况,自动转换类型,当然,这是编译器自动完成的。
自动转换的前提条件:
满足特殊情况,何为特殊情况:
1、赋值运算或 ++ -- 运算
2、在byte、int、short、char四种类型发生。
3、假如是赋值运算,赋值符号“=”的右边为常量,且取值范围在符号左边的类型中。
|