黑马程序员技术交流社区
标题:
赋值运算“+=”的问题
[打印本页]
作者:
张亚青
时间:
2013-3-7 15:33
标题:
赋值运算“+=”的问题
本帖最后由 张亚青 于 2013-3-7 15:46 编辑
package test;
class Test1
{
public static void main(String[] args)
{
int i=5;
i=i+5.0;//编译错误: 可能损失精度
i+=5.0;//这里却可以顺利通过编译
System.out.println(i);
}
}
复制代码
问题:为什么i+=5.0; 这个语句可以通过编译? 求详细原理介绍。。。。
作者:
邹学良
时间:
2013-3-7 15:39
本帖最后由 邹学良 于 2013-3-7 15:42 编辑
i+=5.0当相于我们常用的赋值
在内存中的执行步骤为:
int temp=i;
temp=temp+(int)5.0;
temp=i;
作者:
王亚东
时间:
2013-3-7 15:40
class Demo02
{
public static void main(String[] args)
{
int i=5;
//i=i+5.0;// 这句话相当于 i = (double)i+5.0; 5.0是double类型,i是int类型,他们运算时,int会转为double
i+=5.0;//这里相当于:i = i+(int)5.0; +=是赋值运算符,就是把double强制转为int赋给i
System.out.println(i);
}
}
复制代码
作者:
张洪慊
时间:
2013-3-7 15:40
同学,请看这
http://bbs.itheima.com/forum.php?mod=viewthread&tid=39894
请在提问之前做到以下几点:
①搜索下论坛看是否已有同学提问
②仔细回想毕老师是否讲解
③没有在提问,有的话就
收藏
吧!!
④个人建议:由于知识点比较多,建议
做好笔记
作者:
移动小坦克
时间:
2013-3-7 15:46
本帖最后由 韩松范 于 2013-3-7 15:48 编辑
这个搜索论坛会有答案
http://bbs.itheima.com/forum.php ... mp;page=1#pid241403
作者:
曾祥旭
时间:
2013-3-7 16:12
这是一个类型自动提升问题,首先要明确两点:
第一点:i+=5.0;这个的+=是赋值运算符,赋值的是两边的和,我们可以把这个条件表达式理解为i=i+5.0;
但是,不同的是底层会进行自动转换动作,将(i+5.0)的结果自动转换成int类型的值,然后再赋给左边的i。
第二点:在java中,默认情况下,各个基本数据类型间是可以进行转型操作的:
byte-->short-->int-->long-->float-->double。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2