无法用java完成此分配

无法用java完成此分配,java,Java,有人能解释为什么会这样吗 int i=0; i=i++; i=i++; i=i++; System.out.println(i); 它打印零。i++是后增量()。它递增i,但表达式的结果是递增前i的值。将此值赋回到i实际上保持i的值不变 把它分解成这样: int i = 0; int j = i++; 在这种情况下,很容易理解为什么j==0。现在,我们用i代替j。右边的值仍然是0,这就是为什么在代码段中得到i==0。您的意思是: int i = 0; i++; i++; i++; Syste

有人能解释为什么会这样吗

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

它打印零。

i++
是后增量()。它递增
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=“先增加后分配”

AI=“先分配后增加”

反例

$ 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);
    }
}
相关的