Java | 赋值操作符的注意事项

导读:本篇文章讲解 Java | 赋值操作符的注意事项,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、赋值操作

赋值操作的操作顺序是从右到左

先计算赋值操作符右边的公式,在赋值给左边变量

二、先运算,再赋值

+=即自加
i+=2;
等同于
i=i+2;

其他的 -= , *= , /= , %= , &= , |= , ^= , >>= , >>>= 都是类似,不做赘述

三、问题研究

1、i的最终结果是?

int i = 1;
i+=++i;

2、结果

3

3、错误答案及原因:

4,因为误会是2+=2了。

4、原因分析

int i = 1; i+=++i; 理解 就是 i = i + ++i

解析:抛开静态情况。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。

首先代码执行过程是:

0: iconst_1 将常量1压入操作数栈。此时栈顶值为1.

1: istore_1 将栈顶元素弹出(值1),存入到局部变量表index为1的位置。这里一般index为0的位置存储的是当前实例。想象下局部变量结构【当前实例,1】

2: iload_1 将局部变量表index的位置值复制一份到操作数栈。栈顶值为1

3: iinc 1, 1 iinc就是进行自增操作 第一个1是操作局部变量表index为1的值,第二个值表示增加的数量 ,也就是++i 等价于i = i+1;1+1=2.把结果存放到局部变量表index为1里面

4: iload_1 将局部变量index为1的值(此刻为2) 存一份到操作数栈。此时操作栈存了 之前的1 和这次的2

5: iadd 这个命令是将操作栈里前俩个值相加 1+2 =3 ,把结果放在栈顶

6: istore_1 将栈顶元素弹出(值3) 存到局部变量index为1的位置 也就是i = 3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103263.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!