在下面的示例代码中,为什么每个方法之后的最终值不同。我希望两者都显示“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
调用这两个方法时发生的情况。
首先。
i
从 0
开始,并打印 0
。 i++
被评估。因为它是后递增,所以表达式值是旧值 0
,因此这就是传递给 doSomethingA
的值。后增量将 i
保留为 1
。 doSomethingA
将 x
(0
) 分配回 i
,因此打印 0
。
第二。
i
从 0
开始,并打印 0
。 i++
被评估。因为它是后递增,所以表达式值是旧值 0
,因此这就是传递给 doSomethingB
的值。后增量将 i
保留为 1
。 doSomethingB
将 x
(0
) 添加到 i
,因此 i
仍为 1
,并打印 1
。
关于Java Postfix 增量运算符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596983/