gpt4 book ai didi

java - 为什么这里忽略了这个 Java 运算符优先级?

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:00 24 4
gpt4 key购买 nike

以下代码打印出“3”,而不是您可能期望的“4”。

public class Foo2 {
public static void main(String[] args) {
int a=1, b=2;
a = b + a++;
System.out.println(a);
}
}

我明白怎么做。后缀增量发生在“a”的值被加载之后。 (见下文)。

我不太明白这是为什么。后缀++的运算符优先级比+高,不是应该先执行吗?

% javap -c Foo2

Compiled from "Foo2.java"
public class Foo2 extends java.lang.Object{
public Foo2();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iconst_2
3: istore_2
4: iload_2
5: iload_1
6: iinc 1, 1
9: iadd
10: istore_1
11: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
14: iload_1
15: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
18: return

最佳答案

Postfix ++ 增加变量的值,返回增加前的值。因此,在您的示例中 operator++ 的返回值将是 1,当然 1 + 2 将得到 3,然后分配给 a。到赋值时,++ 已经将 a 的值递增到 2(因为优先级),所以 = 覆盖增加的值。

关于java - 为什么这里忽略了这个 Java 运算符优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1489489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com