前缀和后缀的语义++&引用;Java中的运算符

前缀和后缀的语义++&引用;Java中的运算符,java,post-increment,pre-increment,Java,Post Increment,Pre Increment,我想知道为什么这段代码会给出输出112 最后一个数字2是如何产生的 public static void main(String[] args) { int i = 0; System.out.print(++i); System.out.print(i++); System.out.print(i); 为什么会发生这种情况?i++是后增量运算符,它的表达式值为i的旧值,但会产生递增i的副作用。值是1,但它会将i更改为2i最初为0,然后对其进行预增量并打印,这样

我想知道为什么这段代码会给出输出
112

最后一个数字
2
是如何产生的

public static void main(String[] args) {
    int i = 0;
    System.out.print(++i);
    System.out.print(i++);
    System.out.print(i);

为什么会发生这种情况?

i++
是后增量运算符,它的表达式值为
i
的旧值,但会产生递增
i
的副作用。值是
1
,但它会将
i
更改为
2

i最初为0,然后对其进行预增量并打印,这样您就有了第一个1,然后再次打印它,第二个1,然后再进行后增量,最后一次打印,最后一次打印,您就有了2

您的代码片段,它被翻译为

int i = 0;
i = i + 1; // 1
System.out.print(i); // 1
System.out.print(i); // 1
i = i + 1; // 2
System.out.print(i); // 2
这就是为什么最终结果是2


++i
它在被print方法调用之前递增变量,
i++
它在方法执行之后递增变量。

您正在对
i
应用两个递增。初始值为0,因此经过两次增量(
++i
i++
)后,它将变为2

i++
++i
都将
i
的值增加一

它们类似于

i = i+1;
但是,
++i
首先增加
i
的值,然后使用它,因此
0
变成
1
并打印出来,而
i++
首先使用值,然后增加
i
的值,因此打印的值是
1
,然后变成
2
,因此是最后一位(i的最终值是2。

简单地说

在增量后处理中,增量是在读取变量后进行的


在预增量中,变量值首先递增,然后在表达式中使用。

当我们使用后增量或预增量运算符时,它会增加值

增量后运算符(
i++
)先赋值,然后递增。增量前运算符(
++i
)先递增,然后赋值。 它们的行为都是这样的:

int i=0;
i=i++;
System.out.println(i); //1
i=++i;
System.ou.println(i); //1
运行此代码时:

public static void main(String[] args) {
    int i = 0;                //i=0;
    System.out.print(++i);    // increments i to i=1, and prints i
    System.out.print(i++);    // prints i and then increments it to i=2
    System.out.print(i);      // prints i, i.e. 2
}

这与迭代无关。
++i
表示增量和读取
i
i++
表示读取和增量
i
,而
i
表示读取
i
。作为一般规则,不要这样做,否则会导致无法读取代码、增量和单独使用值