靜態方法是否與非靜態方法不同?讓說,我有我的項目下面的類/方法:參數傳遞到靜態方法和非靜態方法的區別
public abstract class A {
public static void populateList(List<Item> list) {
list.add(new Item("something")); //Item is custom class
}
和:現在
public class B {
public void tryToPopulateList(List<Item> list) {
list.add(new Item("something2"));
}
,如果我通過我的列表A類使用A.populateList(myList)
然後指向list
在方法體是一樣的在調用者中指向myList
,因此這種靜態方法實際上改變了myList
而不僅僅是它的本地副本。
但是如果我打電話:
B b = new B();
b.tryToPopulateList(myList);
然後指向list
的方法比指針myList
所以我想這是創造了該方法的本地副本和「something2」添加到該副本不同。結果是原來的myList在這種情況下不會被改變。
這種行爲是否正常?你有任何解釋或鏈接到explenation傳遞參數如何在靜態函數中工作?
是的,我知道如果我想更改列表,我會更好地從函數中返回新的列表,但我只是很好奇,因爲我沒有在任何地方找到這個主題。謝謝。
編輯
正如評論所說,參數將被視爲相同的方式在靜態和非靜態方法。我在這裏沒有列出的代碼中犯了一個錯誤。
您確定在第二種情況下沒有修改原始副本。我認爲,應該修改。請重新檢查一下。 –
「靜態」與實例方法中的參數處理沒有區別。 – madth3
那麼,至少不是在我的項目。我將在普通的Java應用程序中重新測試它,但在調試時,我可以清楚地看到方法體中的對象「list」與被調用者傳遞的「myList」具有不同的地址。另外返回者列表是未修改的(具有零項...不爲空)。 Item類的定義可以改變什麼?它只是String和bool持有者。 – Tom