黑马程序员技术交流社区
标题:
java的操作符 += 的问题
[打印本页]
作者:
隋营营
时间:
2012-5-2 14:38
标题:
java的操作符 += 的问题
本帖最后由 隋营营 于 2012-5-2 20:24 编辑
无意中发现一个奇怪的现象:
public class Testext {
public static void main(String[] args){
int i = 5;
long j = 8;
i += j; // 编译正确
i = (i + j); //编译错误,必须加强制转换:i = (int)(i + j);
}
}
i = i + j; 与 i += j 应该是等价的吧?
谁能解释下原因……
作者:
刘基军
时间:
2012-5-2 14:59
"+="的特殊之处: 内部自动实现了类型转换的步骤
作者:
黄或俊
时间:
2012-5-2 15:02
int i = 5;
long j = 8;
i += j; // +=会先检测相加之后的和是否在int范围内,如果是赋值,+=运算会自动转换类型
i = (i + j); // 因为+法运算,i会自动类型提升为long类型,最后的结果是long无法赋值给int
作者:
蒋映辉
时间:
2012-5-2 15:05
i += j; 如楼上所说,自动实现了转换步骤, i = (i + j); 这个不能实现
另外注意数字类型转换的时候尽量小类型转换为大类型 比如double转换float没问题 但是反过来可能就会出问题了哦
作者:
林豪
时间:
2012-5-2 15:08
i+=j只运算一次,他内部自动转换类型值
而i=(i+j)运算两次,他内部不会自动转换
作者:
杨志
时间:
2012-5-2 15:35
这里的 += 会自动的去实现类型的转换的.当发现这个类型 不一样的时候.
会自动的去将long的 j 转换成 int.
面在下面的 i + j . 根据运算,编译器会将i 自动的去向高级转换,
将int 类型的i 转换成long类型。然后就相当于是要将一个long类型的数字
赋值给一个int类型。这肯定是不可以的。
Java中支持自动向上转换但不支持自动向下转换。
谢谢!
作者:
刘_浩
时间:
2012-5-2 15:36
不能等价。i = i + j;因为i j 都是变量,相加后可能出现超出范围的情况。而i += j有一个类型自动向下转型的动作;只要确定了i j相加不超出范围都不会报错。如查超出范围就会报错。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2