如何在 if 条件下递增和递减
How increment and decrement with if condition
我有这个代码:
class Example {
public static void main(String args[]) {
int x = 99;
if (x++ == x) {
System.out.println("x++==x : " + x);
}
if (++x == x ) {
System.out.println("++x==x : " + x); // ++x == x : 101
}
if (x == x++) {
System.out.println("x==x++ : " + x); //x==x++ : 102
}
if (x == ++x) {
System.out.println("x==++x : " + x);
}
if (++x == ++x) {
System.out.println("++x==++x : " + x);
}
if (x++ == x++) {
System.out.println("x++==x++ : " + x);
}
if (++x == x++) {
System.out.println("++x==x++ : " + x); // ++x==x++ : 109
}
}
}
这是输出 -->
++x==x : 101
x==x++ : 102
++x==x++ : 109
我想弄清楚 java 编译器是如何处理这段代码的。我可以弄清楚它是如何得出这部分输出的:
++x==x : 101
x==x++ : 102
但我无法处理这部分输出:
++x==x++ : 109
这段代码是如何工作的?最重要的是最后的输出是如何工作的?
你只需要知道 3 件事,并用逻辑将它们组合起来:
x++
表示:“递增 x,但表达式的值是递增之前 x 的值”。
++x
表示:“递增 x,表达式的值就是递增后 的值”。
- 对于
==
运算符,事情从左到右解析。所以,java 'resolves'左边的东西,然后右边的东西,然后计算。
因此,给定:++x==x++
,假设 x
开始时为 107。让我们分解一下:
- 首先解析左侧,即
++x
。为此,递增(x
现在是 108),然后将表达式解析为值 after 递增。所以,左边是 108
.
- 接下来解析右侧,即
x++
。为此,递增(x
现在是 109),然后将表达式解析为值 before 递增。所以,右边是 108
.
- 现在做手术。
108 == 108
。那是 true
,所以 if 'passes',然后打印结果。鉴于 x
现在是 109,它会打印 "++x==x++ : 109".
这正是它的作用。
++x
是预增
x++
是 post-增量
即使您的条件为假,递增也会完成。
我有这个代码:
class Example {
public static void main(String args[]) {
int x = 99;
if (x++ == x) {
System.out.println("x++==x : " + x);
}
if (++x == x ) {
System.out.println("++x==x : " + x); // ++x == x : 101
}
if (x == x++) {
System.out.println("x==x++ : " + x); //x==x++ : 102
}
if (x == ++x) {
System.out.println("x==++x : " + x);
}
if (++x == ++x) {
System.out.println("++x==++x : " + x);
}
if (x++ == x++) {
System.out.println("x++==x++ : " + x);
}
if (++x == x++) {
System.out.println("++x==x++ : " + x); // ++x==x++ : 109
}
}
}
这是输出 -->
++x==x : 101
x==x++ : 102
++x==x++ : 109
我想弄清楚 java 编译器是如何处理这段代码的。我可以弄清楚它是如何得出这部分输出的:
++x==x : 101
x==x++ : 102
但我无法处理这部分输出:
++x==x++ : 109
这段代码是如何工作的?最重要的是最后的输出是如何工作的?
你只需要知道 3 件事,并用逻辑将它们组合起来:
x++
表示:“递增 x,但表达式的值是递增之前 x 的值”。++x
表示:“递增 x,表达式的值就是递增后 的值”。- 对于
==
运算符,事情从左到右解析。所以,java 'resolves'左边的东西,然后右边的东西,然后计算。
因此,给定:++x==x++
,假设 x
开始时为 107。让我们分解一下:
- 首先解析左侧,即
++x
。为此,递增(x
现在是 108),然后将表达式解析为值 after 递增。所以,左边是108
. - 接下来解析右侧,即
x++
。为此,递增(x
现在是 109),然后将表达式解析为值 before 递增。所以,右边是108
. - 现在做手术。
108 == 108
。那是true
,所以 if 'passes',然后打印结果。鉴于x
现在是 109,它会打印 "++x==x++ : 109".
这正是它的作用。
++x
是预增
x++
是 post-增量
即使您的条件为假,递增也会完成。