java - 递增和递减运算符工作逻辑
问题描述
我知道如果将运算符放在操作数之前,称为前置递增运算符和前置递减运算符,则首先应用运算符,返回值是表达式的新值。
或者,如果运算符放在操作数之后,称为后自增运算符和后减运算符,则返回表达式的原始值,在返回值后应用运算符。
但我不明白下面的代码输出。
//CODE FRAGMENT A
int value1 = 3;
int value2 = ++value1 * 5 / value1-- + --value1;
// value2 = 4 * 5 / value1-- + --value1;
// value2 = 4 * 5 / 4 + --value1;
// value2 = 4 * 5 / 4 + 2;
// value2 = 20 / 4 + 2;
// value2 = 5 + 2;
// value2 = 7;
// CODE FRAGMENT B
int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
// var1 = 10 + 11 + 11 - 10 + 10;
// var1 = 32
// CODE FRAGMENT C
int var2 = 5;
var2 += var2 + var2 + ++var2;
// var2 = var2 + var2 + var2 + ++var2;
// var2 = 5 + 5 + 5 + 6;
// var2 = 10 + 5 + 6;
// var2 = 15 + 6;
// var2 = 21;
我知道最高优先级运算符后一元运算符和前一元运算符,但我不了解“代码片段 B 和代码片段 C”的情况。为什么这种情况不评价如下?
// CODE FRAGMENT B
int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
// var1 = 10 + var1 + 11 - 10 + 10
// var1 = 10 + 10 + 11 - 10 + 10
// var1 = 20 + 11 - 10 + 10
// var1 = 31 -10 + 10
// var1 = 21 + 10
// var1 = 31
// CODE FRAGMENT C
int var2 = 5;
var2 += var2 + var2 + ++var2;
// var2 = var2 + var2 + var2 + ++var2;
// var2 = var2 + var2 + var2 + 6;
// var2 = 6 + 6 + 6 + 6;
// var2 = 12 + 6 + 6;
// var2 = 18 + 6;
// var2 = 24;
解决方案
这是代码片段 B 的逻辑,var1
在括号中显示了更新后的值。
int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
var1++ = 10 (var1 = 11)
var1 = 10 + var1 + var1-- - var1-- + ++var1;
var1 = 11 (var1 = 11)
var1 = 10 + 11 + var1-- - var1-- + ++var1;
var1 = 21 + var1-- - var1-- + ++var1;
var1-- = 11 (var1 = 10)
var1 = 21 + 11 - var1-- + ++var1;
var1 = 32 - var1-- + ++var1;
var1-- = 10 (var1 = 9)
var1 = 32 - 10 + ++var1;
var1 = 22 + ++var1;
++var1 = 10 (var1 = 10)
var1 = 22 + 10 ;
var1 = 32 ;
32 (var1 = 32);
推荐阅读
- vba - 如何将用户表单列表框中的选择填充到项目符号 MS-Word-VBA 中?
- postgresql - 在 PostgreSQL 中解析文本数据
- google-pay - 在谷歌支付(谷歌钱包)中存储二维码
- python - 如何将 Django env 文件夹添加到 .gitignore?
- javascript - 使用 Express Backend 动态更改 React Js 应用程序的元标记
- python - 检查与 AST 参数规范的兼容性
- android - 使用材料设计为 androidx.legacy:legacy-support-v4:1.0.0 更改 androidx.appcompat.widget.SearchView(操作栏中的搜索图标)
- python - 类型错误:+ 不支持的操作数类型:“datetime.datetime”和“datetime.time”
- r - 如何正确地将边际密度图添加到 ggplot 对象?
- ionic-framework - 我得到这个黑屏而不是离子上的应用程序屏幕?如何解决这个问题?