gpt4 book ai didi

Java Postfix 增量运算符行为

转载 作者:行者123 更新时间:2023-12-01 13:56:30 24 4
gpt4 key购买 nike

在下面的示例代码中,为什么每个方法之后的最终值不同。我希望两者都显示“i = 1”

public class Test {

public int i = 0;

public static void main( String args[] ) {
Test t = new Test();
t.test();
}

public void test() {

i = 0;
System.out.println( "[start a] i = " + i );
doSomethingA( i++ );
System.out.println( "[end a] i = " + i );

System.out.println( "---------------------" );

i = 0;
System.out.println( "[start b] i = " + i );
doSomethingB( i++ );
System.out.println( "[end b] i = " + i );

}

// Direct assignment of passed value
public void doSomethingA( int x ) {
i = x;
}

// Equation of passed value
public void doSomethingB( int x ) {
i += x;
}

}

结果是:

[start a] i = 0
[end a] i = 0
---------------------
[start b] i = 0
[end b] i = 1

为什么我在方法中对“i”所做的事情很重要,在方法结束后它不应该增加 1 吗?

在这两种情况下,我都在方法内将“i”的值分配为 0。

谢谢

最佳答案

以下是从 test 调用这两个方法时发生的情况。

首先。

i0 开始,并打印 0i++ 被评估。因为它是后递增,所以表达式值是旧值 0,因此这就是传递给 doSomethingA 的值。后增量将 i 保留为 1doSomethingAx (0) 分配回 i,因此打印 0

第二。

i0 开始,并打印 0i++ 被评估。因为它是后递增,所以表达式值是旧值 0,因此这就是传递给 doSomethingB 的值。后增量将 i 保留为 1doSomethingBx (0) 添加到 i,因此 i 仍为 1,并打印 1

关于Java Postfix 增量运算符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596983/

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