java - 后增量替换
问题描述
我已经有一个自己的问题,但我想通过示例扩展它发布增量
char a = 'D';
int b = 5;
System.out.println(a++/b+--a*b++);
问题的答案之一是:
(68 / 5) + (68 * 5)
而 b++ 对此没有影响。
我的疑问是如果 b++ 没有效果,那么为什么 a++ 有效果?理想情况下应该是
步骤1:(68/b+--a*b++);
现在 a = 69;
第2步:(68/b+--a*5)
现在 a = 69; b =6;
第 3 步:(68/b+68*5)
第4步:(68/6+68*5)
回答 which 351 但预期的答案是 353
解决方案
评估顺序表明操作数总是从左到右执行。
优先级表明*
and/
运算符+
在and之前应用-
,除非被括号覆盖。
所以,你是对的,这a++/b+--a*b++
意味着(a++ / b) + (--a * b++)
。那是优先级。
由于数字运算符将值提升为int
(在这种情况下),你也是对的,char a = 'D'
它等同于int a = 68
.
所以:
(a++ / b) + (--a * b++) a = 68 b = 5
(68 / b) + (--a * b++) a = 69 b = 5
(68 / 5) + (--a * b++) a = 69 b = 5
(68 / 5) + (68 * b++) a = 68 b = 5
(68 / 5) + (68 * 5 ) a = 68 b = 6
13 + 340 a = 68 b = 6
353 a = 68 b = 6
如您所见,b++
确实有一个效果:对执行表达式b
后的值。
推荐阅读
- python - 使用带有无头 chrome 驱动程序的 adblocker 扩展,使用 python selenium
- visual-studio-code - VSCode:在新窗口中打开选择的命令是什么(垂直拆分?)
- google-cloud-firestore - 使用结构化查询根据数组中的键获取值
- python - 向量化一个函数,以便它可以同时在多行 n 维数组上运行?
- amazon-web-services - 如何使用 AWS Systems Manager 维护窗口从负载均衡器 (ELB) 中删除 EC2 实例
- html - 如何使覆盖 iframe 的 div 在悬停时淡入淡出,使 iframe 可点击?
- java - 错误:您使用的 JDK 不支持 JavaFX
- java - 在 Java Maven 项目中有没有办法调用导入 Numpy 的 Python 代码
- c - 简单的互斥锁应用程序不能正常工作?
- vba - 如何在 VBA 中确定所选内容上方的 Heading-X 样式标题?