无法在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); } }
有关
- 初始化,分配和声明