将值传递给函数

时间:2011-11-03 17:33:21

标签: java

  

可能重复:
  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给出的调用函数中的值?

2 个答案:

答案 0 :(得分:0)

我认为您正在尝试使用pass-by-reference并使用它来通过func更改变量的值。这不能用Java完成。它严格按价值传递。即使将对象作为参数传递,您实际传递的是参考值。所以这样做:

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

...不会更改a引用。它仍指向Object实例而不是String“test”。方法func仅覆盖了调用时o的参考值的局部变量a

我建议您将变量封装在传递给方法的某个类中,或者从接受参数列表的方法返回,或重新考虑您的设计。

答案 1 :(得分: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) {
...
}

或者因为他们从0开始,或许这样:

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