在Java中实例化新对象会重置该对象的其他实例中的所有数据

时间:2014-10-07 18:22:03

标签: java

我目前正在处理具有特定类的多个实例的代码。每个实例都运行某些任务,并收集发送到显示层以供显示的数据。发生的问题是,当创建类的新实例时,它会重置当前存在的该类的所有其他实例。这是一个有希望说明我的观点的例子

Foo instanceFooOne = fooService.performActions(data); 
Foo instanceFooTwo = fooService.performActions(data); 

class FooService {
    public void performActions(Object data) {
        Foo foo = new Foo();
        return foo;
    }
}

对我来说,这应该有两个独立的Foo对象实例,但是对于创建的所有Foo对象实例,只有最新版本的Foo。有没有办法不发生这种情况?

1 个答案:

答案 0 :(得分:1)

您需要保存数据引用。您当前仅为“数据”引用内存,因此所有其他实例都将更改。

Foo instanceFooOne = fooService.performActions(data); 
Foo instanceFooTwo = fooService.performActions(data); 

class Foo{
private Object data;
    public Foo(Object data) {
        this.data = data;
    }
public Object getData(){
  return data;
}
}

然后使用:

instanceFooOne.getData();

引用Gevorg:

  

Java是pass-by-value,因为在方法中你可以修改   尽可能多地引用Object但无论你怎么努力   你将永远无法修改将保留的传递变量   无论如何都引用同一个对象!