見測試代碼:如果Java是一種「按價值調用」的語言,那麼爲什麼會發生這種情況呢?
class Node
{
int num = 0;
}
class TestPassByReference
{
void increaseByOne(Node N)
{
N.num++ ;
}
public static void main(String args[])
{
Node N = new Node() ;
TestPassByReference T = new TestPassByReference() ;
T.increaseByOne(N) ;
System.out.println("num = "+N.num) ;
T.increaseByOne(N) ;
System.out.println("num = "+N.num) ;
T.increaseByOne(N) ;
System.out.println("num = "+N.num) ;
}
}
其中給出結果:
num = 1
num = 2
num = 3
這裏的問題是,既然Java
是call by value
那麼Node
的num
屬性應該保持0
我認爲這是由於創建了一個對象T
,它將包含一個對象N
。但是T
沒有屬性來保存類似對象的Node
。那麼這是怎麼發生的呢?
任何幫助是邪惡的讚賞。
月亮。
你有沒有看到這個:http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value? –
N是按值調用的。當用點引用該值時,將保留作爲對象引用的複製值並引用該對象。這稱爲其他語言的指針。 –
[Java是否爲「傳遞參考」或「按值傳遞」?](http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass逐值) –