这是我的问题,如何更改其类之外的对象,以便它保持在外部类中所做的更改?
以下是代码示例:
主要课程:
public class Main {
public static void main(String[] args)
{
Variable var = new Variable(1,2,3);
Change.changeVar(var);
System.out.println("" + var.geta() + "" + var.getb() + "" + var.getc());
}
}
变量类:
public class Variable {
private int a;
private int b;
private int c;
public Variable(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public int geta()
{
return this.a;
}
public int getb()
{
return this.b;
}
public int getc()
{
return this.c;
}
}
更改课程
public class Change {
public static void changeVar(Variable var)
{
Variable var2 = new Variable(4,5,6);
var = var2;
}
}
答案 0 :(得分:2)
在你的例子中,没有。当changeVar()退出时,将丢弃参数var,并且main()方法中的var保留其原始值。阅读pass by reference。
答案 1 :(得分:2)
public class Variable {
private int a;
private int b;
private int c;
public Variable(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public int geta()
{
return this.a;
}
public int getb()
{
return this.b;
}
public int getc()
{
return this.c;
}
// depending on your use case, setters might be more appropriate
// it depends on how you want to control the changing of the vars
public void update(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
public class Change {
public static void changeVar(Variable var)
{
var.update(4,5,6);
}
}
答案 2 :(得分:1)
这样做?你不能。
您正在传递对该实例的引用。但是,在函数内部,您使用新引用。分配给新参考不会影响其他参考。
答案 3 :(得分:1)
您不能以您描述的方式执行此操作,因为在Java中,变量是按值传递的。但是,您可以通过不同的方式实现所需的效果:
public class Variable {
private int a;
private int b;
private int c;
public Variable(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public int geta()
{
return this.a;
}
public int getb()
{
return this.b;
}
public int getc()
{
return this.c;
}
public void seta(int a) { this.a = a; }
public void setb(int b) { this.a = b; }
public void setc(int c) { this.a = c; }
}
public class Change {
public static void changeVar(Variable var)
{
var.seta(4);
var.setb(5);
var.setc(6);
}
}
答案 4 :(得分:0)
您需要提供setter方法并在原始对象上调用它们:
public void seta(int newa) { this.a = newa; }
然后你会说
public static void changeVar(Variable var)
{
var.seta(4);
//etc
}
您只需要重新定位本地变量引用var
以指向新实例var2
。它对传递给方法的原始实例的值没有影响。
答案 5 :(得分:0)
public static void changeVar(Variable var)
{
Variable var2 = new Variable(4,5,6);
var = var2;
}
首先,你可以在Variable类中编写一些setter方法,然后你可以在上面的代码中调用这些setter方法,比如var.setA(4)
......等等。enter code here