2011-11-03 134 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; 
}