观察下面例子。思考一下:为什么 "s=s+1;" 编译不通过而"s+=1;"编译就通过了呢?

隐式类型转换可以从 byte->short->int->long自动转换。若反过来如上图 int型转换为short类型,会丢失精度,必须进行显示转换。
s=s+1是先执行s+1然后把结果赋值给s,因为1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换,即将int类型转换为short类型,所以编译的时候会报错。
s+=1不同,由于他是使用+=操作符,在解析的时候s+=1等价于s=(short)(s+1),是进行显示转换。
那么什么是隐式类型转换,什么是显示类型转换
- 隐式类型转换也叫自动类型转换,由系统自动完成,从存储范围小的类型到存储范围大的类型。byte→short(char)→int→long→float→double
- 显示类型转换也叫强制类型转换。是从存储范围大的数值类型赋值给存储范围小的类型,由于此时可能会出现丢失精度的问题,因此,需要认为的进行转换。称之为强制类型转换。即double→float→long→int→short(char)→byte

938

被折叠的 条评论
为什么被折叠?



