2014-10-07 190 views
1

我目前正在使用具有特定类的多个实例的代码。每个实例都运行某些任务,并收集发送到显示层的数据以供显示。发生的问题是,当创建类的新实例时,它会重置当前存在的该类的所有其他实例。这里,希望能说明我的观点使用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。有没有办法不发生这种情况?

+0

'Foo'中的字段可能是'static'吗? – Pshemo 2014-10-07 18:23:15

+3

我敢打赌,你不会在'Foo'构造函数中创建'data'的新副本。这意味着您正在创建的两个“Foo”对象都存储对同一个“数据”的引用。如果你改变'data',所有'Foo'都会看到改变。 – azurefrog 2014-10-07 18:23:29

+0

'foo'实例不同,但存储的'data'对象不是。 – EpicPandaForce 2014-10-07 18:25:24

回答

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(); 

引述格沃尔格:

Java是传址的价值,因为你可以修改 引用的对象,只要你想尽可能多的方法中但无论你多么努力地尝试 ,你将永远无法修改传递的变量,它将保持 引用相同的对象,无论如何!