我有这个代码:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出 -->
++x==x : 101
x==x++ : 102
++x==x++ : 109
Run Code Online (Sandbox Code Playgroud)
我想弄清楚java编译器如何处理这段代码。我可以弄清楚它是如何得出这部分输出的:
++x==x : 101
x==x++ : 102
Run Code Online (Sandbox Code Playgroud)
但我无法处理这部分输出:
++x==x++ : 109
Run Code Online (Sandbox Code Playgroud)
这段代码是如何工作的?最重要的是最后的输出是如何工作的?
你只需要知道三件事并使用逻辑将它们组合在一起:
x++意思是:“增加 x,但表达式的值是增加之前 x 的值”。++x意思是:“增加x,表达式的值就是增加后x的值”。==。所以,java“解析”左边的东西,然后是右边的东西,然后进行计算。因此,给定:++x==x++,假设x从 107 开始。让我们将其分解:
++x。为此,请递增(现在为 108),然后将表达式解析为递增后的x值。所以,左边是。108x++. 为此,请递增(现在为 109),然后将表达式解析为递增之前的x值。所以,右手边是。108108 == 108。也就是说true,如果“通过”,则打印结果。鉴于x现在是 109,它将打印“++x==x++ : 109”。这正是它的作用。
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |