A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += java语言规定的运算符,暗含着类型强制转换,java编译器会对它进行特殊处理,因此可以正确编译。

5 个回复

倒序浏览
我也是这样想的 +=是强转赋值
回复 使用道具 举报
╰繼/aiq戀い 发表于 2014-6-21 21:03
我也是这样想的 +=是强转赋值

嗯,:lol,有问题一起探讨吧
回复 使用道具 举报
我也是这样想的 +=是强转赋值
回复 使用道具 举报
byte b1 = 3;
byte b2 = 4;
byte = b1+b2;
报错:java编译器编译的时候无法确定右边两变量运算结果是否超过byte范围、
byte = 3+4;
不会报错:java编译器编译的时候可以确定右边常量是否超过byte范围、

小于int的俩变量(byte或者short)相加、默认结果为int类型。


byte自动转换为int与另一个int相加即使超出int不会报错、正常运算、但是会溢出
short和byte道理一样
回复 使用道具 举报
带运算的赋值会隐式进行强制转换,

变量之间的运算首先转换类型再运算,例如b3=b1+b2,首先把b1和b2转换为int类型再运算,
常量之间的运算首先运算,然后比较结果是否有溢出,例如b4=3+4;不会报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马