黑马程序员技术交流社区

标题: 赋值运算“+=”的问题 [打印本页]

作者: 张亚青    时间: 2013-3-7 15:33
标题: 赋值运算“+=”的问题
本帖最后由 张亚青 于 2013-3-7 15:46 编辑
  1. package test;

  2. class Test1
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int i=5;
  7.                
  8.                 i=i+5.0;//编译错误: 可能损失精度
  9.                 i+=5.0;//这里却可以顺利通过编译
  10.                 System.out.println(i);
  11.         }
  12. }
复制代码
问题:为什么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
  1. class Demo02
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.             int i=5;               
  6.             //i=i+5.0;// 这句话相当于 i = (double)i+5.0; 5.0是double类型,i是int类型,他们运算时,int会转为double
  7.             i+=5.0;//这里相当于:i = i+(int)5.0; +=是赋值运算符,就是把double强制转为int赋给i
  8.             System.out.println(i);
  9.     }
  10. }
复制代码

作者: 张洪慊    时间: 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