首页 / JAVA / Java中复合赋值运算符的操作顺序
Java中复合赋值运算符的操作顺序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中复合赋值运算符的操作顺序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1155字,纯文字阅读大概需要2分钟。
内容图文
![Java中复合赋值运算符的操作顺序](/upload/InfoBanner/zyjiaocheng/693/3fc376e0a74d4fa9a7db6f6b1aa55704.jpg)
最近,我在一次模拟考试中碰到了以下内容,但对于为什么给出的答案是25、25(根据操作顺序)以及可能会在规范中缺少详细说明的原因,我有些困惑.
public class Test {
public static void main(String[] args) {
int k = 1;
int[] a = {1};
k += (k = 4) * (k + 2);
a[0] += (a[0] = 4) * (a[0] + 2);
System.out.println(k + " , " + a[0]);
}
}
仅看上面的第6行,我将替换为适当的值,并获得以下内容:
k = k + (k = 4) * (k + 2);
我首先评估括号,该括号表示k首先已分配给值4,然后又添加到了数字2,得出的总数为6.这就是我的解释方式:
k = k + 4 * 6;
现在,这变得令人困惑.根据操作顺序,我得到以下信息,对于前面的表达式,这是正确的:
k = k + 24;
在我看来,k应该是4,因为这是新的赋值,但是答案实际上是25,而不是28.显然,复合运算符具有某些我不了解的优先顺??序,或者我的替换原理不正确.
解决方法:
在这个答案中,我将仅考虑k的情况,对于数组来说是相同的.
int k = 1;
k += (k = 4) * (k + 2);
// k += (k = 4) * (k + 2)
// 1 += (k = 4) * (k + 2)
// 1 += 4 * (k + 2) with k = 4
// 1 += 4 * 6 with k = 4
// k = 25
这里的窍门:
> k =在执行计算之前捕获k的值. =称为compound assignment operator.引用JLS的相关部分:
the value of the left-hand operand is saved and then the right-hand operand is evaluated.
> k = 4返回分配的值,所以4.
内容总结
以上是互联网集市为您收集整理的Java中复合赋值运算符的操作顺序全部内容,希望文章能够帮你解决Java中复合赋值运算符的操作顺序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。