有人可以帮我理解原因:
int i=1;
int j=1;
int k=1;
int l=1;
System.out.println(i++ + i++);
System.out.println(++j + ++j);
System.out.println(k++ + ++k);
System.out.println(++l + l++);
得到:
3
5
4
4
答案 0 :(得分:11)
Variable ++意味着:在评估表达式后增加变量。
++变量意味着:在评估表达式之前递增变量。
这意味着,要将您的示例翻译为数字:
System.out.println(i++ + i++); //1 + 2
System.out.println(++j + ++j); //2 + 3
System.out.println(k++ + ++k); //1 + 3
System.out.println(++l + l++); //2 + 2
这是否清楚了,还是需要进一步解释?
需要注意的是:'println'之后所有这些变量的值等于'3'。
由于OP询问,这里有一个“用例”,这个行为实际上有用。
int i = 0;
while(++i < 5) { //Checks 1 < 5, 2 < 5, 3 < 5, 4 < 5, 5 < 5 -> break. Four runs
System.out.println(i); //Outputs 1, 2, 3, 4 (not 5)
}
与:相比:
int i = 0;
while(i++ < 5) { //Checks 0 < 5, 1 < 5, 2 < 5, 3 < 5, 4 < 5, 5 < 5 -> break. Five runs
System.out.println(i); //Outputs 1, 2, 3, 4, 5
}
答案 1 :(得分:4)
要了解的事项:
1. Java从左到右评估表达式
2. ++ i-预增量,即在赋值之前增量
3. i ++ - 后增量,即分配后增量
System.out.println(i++ + i++);
OP1 = I ++
OP2 = 1 ++
总和= OP1 + OP2
i ++ - post增加i的值
和= 3
System.out.println(++ j + ++ j);
OP1 = ++Ĵ
OP2 = ++Ĵ
总和= OP1 + OP2
++ i - 预先增加i的值
然后,将添加op1和op2以将总和打印为5和值 j将是
System.out.println(k ++ + ++ k);
OP1 = K ++
OP2 = ++ķ
总和= OP1 + OP2
将k的值分配给op1,然后递增k。 OP1 = 1,K = 2
增加k的值,然后分配给op2。 OP2 = 3,K = 3
Sum = 4
System.out.println(++ l + l ++);
此处也应用上述逻辑。
答案 2 :(得分:1)
如名称所示,后增量在变量处理(读取)之后增加变量的值,同时预先增加值BEFORE。
对于i,这意味着第一个i增加1,但读取为1,然后再次增加1(现在从第一个增量已经是2),因此增加到3,但读为2.这导致1 + 2 = 3,i的值也是3 ......
答案 3 :(得分:1)
i++ + i++
表示使用i,然后递增,所以我被推到某种堆栈,
然后增加1,
然后将运算符(+)推入堆栈,
然后我(现在2)被推到堆栈。
由于expresseion现已结束,因此会弹出值和运算符: 第二个i是2,第一个i是1,2 + 1 = 3(我现在是3,因为它被推后增加了。)
你可能遗漏的是,在评估整个表达后,我没有增加,在增量后的情况下,反之亦然。[/ p>
答案 4 :(得分:1)
的System.out.println(I ++)
- &GT;生成1,因为它在打印后递增, 但是当它召唤两次时你会得到1 + 2 所以你可以把它翻译成
System.out.println(int i = i + 1,加上int i = i + 1 - &gt;这给出2)
第一个短语给出2和第二个给出3但是你在i ++增量之前打印它,所以你最后会得到1 + 2
的System.out.println(++ j)的;
- &GT;生成2,因为它在打印前递增
所以当你有++ j = 2然后++ j = 3所以++ j和++ j现在是5