我是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给出的调用函数中的值?
答案 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无法正常工作。将a
和b
传递给func
时,会制作副本。 func
可以在内部更改这些副本的值,但是当它返回时,原始a
和b
将保持不变。
我不知道a
和b
代表什么,但我们可以说它们是坐标。你可以这样做:
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;
}