回答
Official Docs on Operators says
除了赋值运算符所有二元运算符是从左向右计算;赋值运算符从右向左评估。
所以+
评估left-to-right
,那里的赋值运算符评估right to left.
使用,如果你想关联性的+
这4
int r=1;
System.out.println((r=2) + r); // execute + is left-to-right
+的相关性是从左到右的 –
您能解释一下,它是如何评估为'4'的?我无法理解它是如何工作的。基于我的理解,我假设它的工作原理是:((r = 2)+ r)=>(2 + r)=>(2 + 1)= 3'。请详细说明。谢谢 – John
@John'r = 2'将2赋给'r'。所以下次使用'r'时,其值为2. – user3932000
是左到右,并表达(r=2)
的值是2
。
参见JLS 15.7
二进制运算符的左边的操作数出现的右侧操作数的任何部分被评估前被完全评估。
如果运算符是一个复合赋值运算符(第15.26.2节),则对左侧运算数的求值既包括记住左侧运算数所表示的变量,又保存该变量的值以用于隐含的二元操作。
如果评估二元运算符的左侧操作数突然完成,则右侧操作数的任何部分都不会被评估。
语句r=2
的值是2.括号之间的嵌套表达式首先被处理。
例如:
int r=2;
System.out.println(r * (r=2 + 1));
输出:
6
为什么?因为r = 2 + 1
返回3
。
同:
int r=2;
System.out.println(r * (2 + 1));
输出仍然6
因为(2 + 1)
是乘法之前评估。
- 1. 爪哇分区与整型括号
- 2. 爪哇分配浮动
- 3. 爪哇 - 替换字符串在括号
- 4. 爪哇 - >包括日食
- 5. 爪哇 - 从分裂
- 6. 爪哇 - 梅森素数分配
- 7. 爪哇 - 映射流变量再分配
- 8. 爪哇三元没有分配
- 9. 爪哇 - RunnableFuture和SortProcessor
- 10. 爪哇 - 2.0和2.00000000000D
- 11. 爪哇通配符错误
- 12. 和钢带的其余部分,爪哇
- 13. 爪哇 - 扫描逗号分隔的双和国际价值
- 14. 逆阵列(爪哇)// Invertir阵列(爪哇)
- 15. 爪哇 - 编译
- 16. 爪哇分裂并与值
- 17. 爪哇Wikitext分析器
- 18. 爪哇蚂蚁包括文件夹
- 19. 爪哇Benfords法
- 20. 爪哇矩阵库
- 21. 爪哇的StringIndexOutOfBoundsException
- 22. 爪哇乔达时间,分配LocalDate月份和年份
- 23. 爪哇 - Runtime.xmemory()
- 24. 爪哇 - 并行
- 25. 爪哇 - 由
- 26. 爪哇 - 每行
- 27. 爪哇从
- 28. 爪哇:checkPositionRow
- 29. 爪哇 - 爪哇8 parallelStream和创建线程自己
- 30. 爪哇 - 利用FFT
先执行?不,括号只影响关联性。 Java总是从左到右评估操作数。 – johnchen902
你为什么期望4?只是好奇... – oliverdejohnson
Thx all ...我推测,首先执行括号中的代码是错误的。 – BigJ