2011-03-29 56 views

回答

9

你不能。

包裝類型是不可改變的,因此,他們有效地模擬原始類型的行爲:通過執行q = 20你做參數q點的Integer與價值20新intstance,但它不會改變由x所引用的原始實例調用方法。

+0

我明白了。那麼有什麼辦法可以解決這個問題嗎? – root 2011-03-29 11:24:51

+0

@tsubasa:究竟是什麼問題? – axtavt 2011-03-29 11:27:53

+0

此外,緩存值爲-128到127的Integer對象,因此不會創建重複的包裝對象。 – CMR 2011-03-29 11:39:32

8

你可以使用AtomicInteger相反,它是可變的:

private AtomicInteger x = new AtomicInteger(0); 

public void setValue(AtomicInteger q) { 
    q.set(20); 
} 

public void callX() { 
    setValue(x); 
} 
1

在Java中,這種行爲會被認爲是非常混亂。通常是一個setter,就像setValue接受一個值並且不會改變它的參數。通常使用getter來返回值。

BTW:恕我直言,除非你有充分的理由這樣做,否則不要使用包裝。

相反,你可能會這樣做。

class A { 
public int getValue() { 
    return 20; 
} 

public void callX() { 
    int x = getValue(); // this sets x to be 20. 
} 
}