我是編程方面的新手,以及本網站,所以請原諒我,如果我搞砸了。我有一段時間搞清楚如何在這裏正確發佈我的代碼。什麼時候'void'方法影響參數?它何時影響原始對象?
package tester;
import java.util.*;
public class Mainclass2 {
public static void main(String[] args) {
int y = 3;
int[] x = {1, 2, 3, 4};
editnumbersArray(x);
editnumbersNotArray(y);
System.out.println(x[2]); **//now this was changed from 3 to 9...**
System.out.println(y); //but this one went unchanged.
}
//this accepts 'x[]' into the 'a[]' parameter.
public static void editnumbersArray(int[] a){
a[2] = 9; **//<---why does this one CHANGE the actual x[2] instead of just a[2]?**
}
//this accepts 'y' into the 'a' parameter.
public static void editnumbersNotArray(int a){
a = 9; **//<--while this one only changes 'a' instead of 'y'?**
}
}
所以我的問題基本上是在那裏輸入的評論。爲什麼傳入方法的數組在傳遞給另一個方法的int不更改時會更改原始數組(x [])的值?我相信這是一個簡單的答案,但是當我做了我的研究時,我無法弄清楚要搜索什麼。我不知道這是叫什麼,所以我搜索的所有東西都導致我錯誤的方式。謝謝你的幫助!!
編輯:感謝您的地址類比!這是你可以向我解釋的最好方式。所以基本上當你將一個數組傳遞給一個參數時,它傳遞的是一個引用,而不是實際的值?所以當我在我的方法中進行調整時,它會改變陣列引用的內容。 我注意到這也發生在一個列表中。所以這個列表實際上並沒有按值傳遞?看來,如果數組/列表本身基本上是通過在編輯,不管我我的方法中的命名(一[]在這種情況下)。
編輯http://javadude.com/articles/passbyvalue.htm此頁面確實清除它。抱歉發佈重複的問題。問題是我不知道我想問什麼。我從來沒有聽說過這些術語「傳值/參考」,所以現在我知道
對這個問題的更好的答案之一,已經被這麼多的形式已經問過:http://stackoverflow.com/a/9404727/680925 – Perception 2013-04-07 17:59:38
可能重複[是Java「傳遞參考」? ](http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – delnan 2013-04-07 18:04:57