java中的自增(++),自减(--)——踩坑

以前学艺不精,导致今天踏坑。

重点:
java运算符优先级图

请注意这张图: 记住自增自减(++ --)的运算优先级高于赋值(=,-=…)符号

自增(++)和自减(–)的自我介绍

自增(++)和自减(–)属于java运算符中的算术运算符。

基本使用

++ 运算,变量自己的值加1。反之,-- 运算,变量自己的值减少1,用法与++ 一致。

1.自增(++)
  • 变量前++ :例如 ++a : 变量先自身加1,然后再将加1后的结果进行其他使用 。
  • 变量后++ :例如 a++ : 变量先加载到别的地方(可理解为 b = a),然后再自身加1,再把b进行运算 。
  • 在前还是在后,决定了是先自增还是先加载

代码:

int i = 0;
// 单行使用时    i++;和++i没有区别
i++;  // i 自身加1
System.out.println(i);//输出  i=1;

int j = 10int a = 0;
a = j++//  第一步   j先加载到别的地方( b=j=10 )
//因为 ++ 的优先级大于 = 优先级
// 第二步   j进行自加   (j = j + 1;)  j = 11;
// 第三步   再把第一步加载起的j(这时应该说是b = 10;)赋值给 a = b = 10;

System.out.println(j+","+a);//输出  j=11,a=10;


int j = 10int a = 0;
a = ++j;
//  第一步   j先进行自加   (j = j + 1;)  j = 11;
// 第二步    j在加载到别的地方( c=j=11 )
// 第三步   再把第二步加载起的j(这时应该说是b = 11;)赋值给 a = b = 11;

System.out.println(j+","+a);//输出  j=11,a=11;

今天的坑
int y = 1;
y = y++;
//分析:
//第一步  ++ 在变量后面 ,则先加载起变量(理解为 x = y = 1)
//因为 ++ 的优先级比 = 高。
//第二步  加载后 继续计算 ++ ,j = j+1;  这时(j=2)
//第三步  进行赋值操作 j = x = 1;
System.out.println(y);  //输出 y = 1;
挖坑1
int i = 0;
i = i++ + (++i + i--);
System.out.println(i);// i = 4;
int j = 0;
j = j++ * (++j + j--);
System.out.println(j);// j = 0;
挖坑1——解析:

虽然() 的优先级高于 + 。但是并不是说,在等式中需要先计算括号内的,应该说是 括号内的计算是不可分割的。
在计算机的读取中,代码是从左向右进行读取的。
以 i = ①i++ + ②(③++i + ④i–); 为例

  • 1.先读取到 ①i++ 把i加载起来(①=i=0),然后计算 ++ ——> i=i+1=1,这时i=1;
  • 2.再读取②(③++i + ④i–),发现是个(),内部的计算不能分割。计算③++i + ④i–
  • 3.③++i的 ++ 在变量i前面,则先计算 i = i + 1 = 2; 再加载 ③ = 2;
  • 4.④i–的 – 再变量的后面,先加载 ④=i=2; 再计算i = i - 1 = 1;
  • 5.可以计算出② = ③ + ④;
  • 6.进行赋值 j = ① + ② = 4;
内存图片解析

内存图片解析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值