直到今天我还是不太明白,以前在写java程序时,如下代码:
i += j;
这个问题是一个java的类型转换的问题,int转化为long类型原则上会造成数据的丢失,因为这2个长度范围是不同的。
i+=j;
是先将long转化为int,然后用int进行了操作。写了个简单的例子:
public static void main(String[] args){int a=1;long b=99999999999999998l;a+=b;System.out.println("a--->:"+a);}
输出的结果是:a--->:1569325055可以证明
可以去查找下 数据类型的转换方面的知识 int的扩展转换(就是系统自动的转换,没有精度损失)是long float double 。 缩减转换(程序员自己转换的,有精度损失)是byte short char ,int不能转换成long的类型 但是long能转换成int类型 。当你写成 i += j等价于先计算i+j,i已经扩展转型long 那么在赋值的时候i就是long类型的写成i=i+j 等价于先计算右边的i+j,在去赋值左边 但是左边的i是int的类型的 右边的i+j是long类型,所以类型就不匹配了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(2)
这个问题是一个java的类型转换的问题,int转化为long类型原则上会造成数据的丢失,因为这2个长度范围是不同的。
i+=j;
是先将long转化为int,然后用int进行了操作。写了个简单的例子:
public static void main(String[] args){
int a=1;
long b=99999999999999998l;
a+=b;
System.out.println("a--->:"+a);
}
输出的结果是:a--->:1569325055
可以证明
可以去查找下 数据类型的转换方面的知识 int的扩展转换(就是系统自动的转换,没有精度损失)是long float double 。 缩减转换(程序员自己转换的,有精度损失)是byte short char ,int不能转换成long的类型 但是long能转换成int类型 。
当你写成 i += j等价于先计算i+j,i已经扩展转型long 那么在赋值的时候i就是long类型的
写成i=i+j 等价于先计算右边的i+j,在去赋值左边 但是左边的i是int的类型的 右边的i+j是long类型,所以类型就不匹配了。