如何解决Java中变量的分配优先级
我有一个代码片段示例
int i1 = 2;
int i2 = 3;
int i3 = i2 + (i2 = i1);
请任何人向我解释为什么在这种情况下i3
将被初始化为5?我以为i2
之后的(i2 = i1)
将是2。而i2 + i2
将是4
解决方法
您经常会犯以下错误:将运算符优先级与操作数的评估顺序相混淆。
优先级仅影响表达式的结构(即含义)。由于您使用了显式括号,因此i2 + (i2 = i1)
中没有真正的疑问-不可能表示(i2 + i2) = i1
。
但是,在Java中,操作数的评估始终为left-to-right。所以“ i2 +(i2 = i1)”表示:
- 取i2的值,将其称为“ tmp1”
- 取i2的地址,称为“ tmp2”
- 取i1的值
- 将该值的副本存储在地址“ tmp2”
- 将手中的值添加到“ tmp1”的值中
- 这是表达式的结果
此序列仅是说明性的,并不是说这是编译器生成的实际目标代码。但这是如何理解您将获得什么结果的方法。
但是,实际上,您不希望编写将变量的赋值组合并使用该变量的先验值的代码。如果我要进行代码审查,建议您重新编写。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。