在下面的示例代码中,为什么每个方法后的结束值都不同。我希望两者都显示“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。
由于
答案 0 :(得分:1)
以下是从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
。
答案 1 :(得分:0)
添加
System.out.println("i=" + i + ", x=" + x);
在doSomethingA
和doSomethingB
方法的开头,你会看到两种情况
i=1, x=0
这是因为
method(i++);
将i
的第一个当前值传递给方法x = 0
,然后将字段i
递增(到1
),然后执行方法体。所以当你在方法体内进行时
i = x;
您将i
设为0
但如果你这样做
i += x;
您要将0
添加到i
的当前值1
,而i
不会更改{{1}}的值。