无法在java中完成此任务

任何人都可以解释为什么会发生这种情况

int i=0; i=i++; i=i++; i=i++; System.out.println(i); 

它打印为零。

i++是一个后增量( JLS 15.14.2 )。 它递增i ,但表达式的结果是增量i值。 将此值重新分配给i实际上会保持i的值不变。

像这样分解:

 int i = 0; int j = i++; 

在这种情况下,很容易看出为什么j == 0 。 现在,我们用i代替左手边而不是j 。 右侧值仍为0 ,这就是您在代码段中获得i == 0的原因。

你打算这样做:

 int i = 0; i++; i++; i++; System.out.println(i); 

i++实际上做了一个赋值,所以如果你添加一个=你只是混淆了一些东西。 这些其他精细的反应者可以给你细节,它的一些细节让我逃避。 🙂

首先,你不应该写这种代码….

但是如果我们考虑问题那么这么简单:它与后缀运算符“返回”值的方式有关。 后缀优先于赋值运算符,但增加i值后的后缀运算符返回i的前一个值。 所以我再次被分配到它以前的值。

再一次不要在你的代码中使用这个结构,因为下一个看到这个的程序员会跟着你(手里拿着一些东西):)

I=++ ,增加, A=i ,赋值。 它们是非交换的: IA != AI

概要

IA = "first increase then assignment"

AI="first assignment then increase"

反例

 $ javac Increment.java $ java Increment 3 $ cat Increment.java import java.util.*; import java.io.*; public class Increment { public static void main(String[] args) { int i=0; i=++i; i=++i; i=++i; System.out.println(i); } } 

有关

  • 初始化,分配和声明