我是新來的Java,並且需要的參數幫助理解的方式來通參考的數據類型的方法或構造函數的參數使用參考的數據類型的方法或構造
Oracle的J2SE教程說:
在這個例子中,該方法將創建一個新的多邊形對象,並從點對象的數組進行初始化(假定點是一個表示X A類,y座標):
public Polygon polygonFrom(Point[] corners) {
// method body goes here
}
但這並沒有幫助我理解這個概念。詳細的解釋非常感謝。
我是新來的Java,並且需要的參數幫助理解的方式來通參考的數據類型的方法或構造函數的參數使用參考的數據類型的方法或構造
Oracle的J2SE教程說:
在這個例子中,該方法將創建一個新的多邊形對象,並從點對象的數組進行初始化(假定點是一個表示X A類,y座標):
public Polygon polygonFrom(Point[] corners) {
// method body goes here
}
但這並沒有幫助我理解這個概念。詳細的解釋非常感謝。
在代碼中,多邊形是這樣:
Point[] points = new Point[]{new Point(1,1), new Point(2,2)};
Polygon p = polygonFrom(points);
除了與您的括號的內角的陣列。
這基本上給polygonFrom
函數points
陣列和做它喜歡什麼。然而,無論polygonFrom
方法確實不會改變原始的points
數組,但它會創建它自己的操作。
例如,可以說我有代碼,像這樣:
String s = "Cheeseburger";
sayString(s);
和方法:
public void sayString(String par1)
{
par1 = par1 + "1";
System.out.println(par1);
}
此輸出:Cheeseburger1
,但字符串s
仍然只有Cheeseburger
。
如果您需要進一步澄清,請詢問。
編輯: 保羅Bellora指出,有一些情況,其中polygonFrom
方法可以改變points
陣列,我會嘗試在這裏解釋一下。然而,如果這沒有任何意義,那麼你不應該擔心它(所有這些都是需要考慮的)。
polygonFrom
方法可以在其自己的方法和整個類內更改任何變量。因此,如果points
陣列在方法之外初始化(即在main
方法之外),則polygonFrom
方法可能會更改points
陣列,但前提是方法內部的代碼表示直接更改該變量。我希望這是有道理的。
例如,在類:
Point[] points;
public MethodAccess()//constructor
{
points = new Point[]{new Point(1,1), new Point(2,2)};
Polygon p = polygonFrom(points);
}
public Polygon polygonFrom(Point[] corners){
//doing stuff with corners variable here
points = corners; //this will change the points variable that was passed
}
構造將發送polygonFrom
的points
變量,但polygonFrom
得到變量,並創建它的一個新的實例。 polygonFrom
方法現在會更改其最新創建的corners
變量,該變量最初的值與points
的值相同。但是,如果方法polygonFrom
明確說要更改points
變量,那麼它在技術上會更改構造函數發送給它的變量。
此答案具有誤導性,因爲數組*的內容可以通過傳入的方法進行修改。我認爲你試圖做的一點是,可以在方法中重新分配對數組的引用,並且調用站點上的引用仍然會指向原始數組對象。 – 2013-02-25 05:29:57
@PaulBellora謝謝!你是對的。我在一節中添加了解釋,但我不確定我是否解釋得很好。 – 2013-02-25 05:40:29
@Ionnez謝謝你的時間。我知道我在問很多......但我是一個純粹的人。你能解釋一下你自己的例子嗎??謝謝 – 2013-02-25 11:18:07
其簡單,檢查下面的代碼 -
public void a() {
List<String> list = new ArrayList<String>();
b(list);
}
public void b(List<String> list) {
list.add("something");
}
方法a()創建的列表,並通過它的參考方法b(),使B()可以修改列表的內容。所以在這種情況下,列表是一樣的,只是它的參考被傳遞了。列表的副本不在此處。
希望這會有所幫助。
檢查這些鏈接。 http://stackoverflow.com/questions/40480/is-java-pass-by-reference和 http://stackoverflow.com/questions/4319537/how-do-i-pass-a-primitive-數據類型引用 – Alex 2013-02-25 05:23:29