Java赋值运算符(+=、-=、*=、/=)使用中遇到的一些问题

       今天学习的是关于Java的基本运算符,这里我要提一下的是一个作业中遇到的问题,就是关于Java中的赋值运算符:+=-=*=/=的问题。

       众所周知,赋值运算符的在所有Java运算符中的优先级是最低的。所以我们遇到某些情况,比如:

       int a = 5;

       a+=5*++a/5 + 2;

       时我们往往会考虑,先对右边进行运算,此时++a所以a6。然后右边总和为8,此时在进行a+=8;的运算,所以a=a+8;得出a=6+8;可是实际我们编程运行的情况却是a13。这是怎么一回事呢?其实这是概念的理解错误,因为我们遇到这种题我们往往会把上面运算式改为:

       a = a + (5*++a/5+2)来运算的,而其实际的定义确是:

       

实际使用示例:

       int n = 2;

       n += 3;

说明:计算以前的n的值是2,也就是把n + 3的值,也就是5再赋值给n,经过运算以后值为5

这里关于复合赋值运算符还应注意的一点是:

复合赋值运算不会改变结果的类型,所以在有些时候运算在逻辑上会出现错误,但是符合计算中数值的表述。例如:

byte b = 127

b += 1

System.out.printlnb);

根据前面的介绍,byte类型的取值区间是-128~127,由于复合赋值运算符不改变结果的类型,则导致结果是-128,而不是128.原因如下:

byte类型值127的机器数是011111110表示正数,后续的数值表示127

该数值加1后,得到的数值是10000000,二进制加法

10000000byte类型中恰好是-128的机器数表示形式其它类型的符合运算符也可能存在类似的情况,使用时需要注意。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值