Chinaunix首页 | 论坛 | 博客
  • 博客访问: 217746
  • 博文数量: 81
  • 博客积分: 1165
  • 博客等级: 少尉
  • 技术积分: 1425
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-04 11:27
文章分类

全部博文(81)

文章存档

2015年(1)

2014年(2)

2013年(37)

2012年(41)

我的朋友

分类: Java

2012-11-06 23:31:34

可能有很多程序员认为i+=1只是i=i+1的简写方式,其实不然,它们一个使用简单赋值运算,一个使用复合赋值运算,而 简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算结果转型为其左操作数的类型。看看以下的两种写法,你就知道它们的差别在哪儿 了:
  (1) byte i=5;
      i+=1;
  (2) byte i=5;
      i=i+1;
    第一种写法编译没问题,而第二种写法却编译通不过。原因就在于,当使用复合赋值运算符进行操作时,即使右边算出的结果是int类型,系统也会将其值转化为 左边的byte类型,而使用简单赋值运算时没有这样的优待,系统会认为将i+1的值赋给i是将int类型赋给byte,所以要求强制转换。理解了这一点 后,我们再来看一个例子:
  byte b=120;
  b+=20;
  System.out.println("b="+b);
  说 到这里你应该明白了,上例中输出b的值不是140,而是-116。因为120+20的值已经超出了一个byte表示的范围,而当我们使用复合赋值运 算时系统会自动作类型的转化,将140强转成byte,所以得到是-116。由此可见,在使用复合赋值运算符时还得小心,因为这种类型转换是在不知不觉中 进行的,所以得到的结果就有可能和你的预想不一样。
阅读(724) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~