2011-11-03 88 views
0

可能重複:
pass by reference in java傳遞價值的功能

我是新來的Java。我試圖搜索很多我的查詢,但無法找到。如果您知道,請幫助我。我有一個功能:

boolean func(int a, int b, myclass obj1, myclass2 obj2) 
{ 
    ... 
} 

void caller() { 
    int a = 0, b=0; 
    myclass obj1 = null; 
    myclass1 obj2 = null; 
    func(a,b,obj1,obj2); 
    if (a == 5 && b ==2) 
    { 
     ... 
    } 
} 

我該怎麼做,使所有傳遞的變量都具有函數func給出的調用函數的值?

+1

然後它再次發生。 –

+0

Java按值傳遞,所以從'caller'傳遞到'func'的所有內容都是原語或引用的副本。你能解釋一下你在'func'中真正做了什麼,以便我們能夠想出更好的方法來處理你想要做的事情? – birryree

+1

你已經問過這個問題,它最後一次也是重複的。 –

回答

0

我想你正在嘗試使用pass-by-reference並使用它來通過func來更改變量的值。這不能在Java中完成。它嚴格按照價值傳遞。即使傳遞一個對象作爲參數,你實際傳遞的是參考值。所以這樣做:

func(Object o) { 
    o = "test"; 
} 
... 
other() { 
    Object a = new Object(); 
    func(a); 
} 

...將不會改變a參考。它仍然指向該對象實例而不是字符串「測試」。方法func僅覆蓋局部變量o,該變量在被調用時被賦予參考值a

我建議你把你的變量封裝在你傳入你的方法的某個類中,或者從接受參數列表的方法返回,或者重新考慮你的設計。

0

Java不能這樣工作。當ab傳遞給func時,將生成副本。 func可以在內部更改這些副本的值,但當它返回時,原始的ab將保持不變。

我不知道ab代表什麼,但讓我們說他們是座標。你可以這樣做:

class Coordinates { 
    int x; 
    int y; 
    // setters and getters omitted... 
} 

boolean func(Coordinates coords, myclass obj1, myclass2 obj2) { 
... 
} 

或者因爲他們一開始就是零,這也許:

Coordinates func(myclass obj1, myclass2 obj2) { 
    Coordinates coords = new Coordinates(); 
    ... 
    return coords; 
}