请考虑以下代码:
DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'
DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'
dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
Run Code Online (Sandbox Code Playgroud)
所以,我想复制dum到dumtwo并更改dum而不影响dumtwo.但上面的代码并没有这样做.当我改变某些内容时dum,也会发生同样的变化dumtwo.
我想,当我说dumtwo = dum,Java 只复制引用.那么,有没有办法创建一个新的副本dum并分配给它dumtwo?
在课堂上,我有:
private Foo bar;
public Constructor(Foo bar)
{
this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)
而不是从参数中提供的对象创建bar的副本,是否可以在构造函数中包含指向bar的指针,以便更改原始栏会更改此对象中的字段?
另一种方式:
int x = 7;
int y = x;
x = 9;
System.out.print(y); //Prints 7.
Run Code Online (Sandbox Code Playgroud)
可以将其设置为打印y打印9而不是7?
抱歉没有问题.通过引用与价值相结合很难!
所以我有一个具有相当大的数据结构的类 - 多维数组.我需要从另一个类访问这些数组.我可以将数组公开并执行经典的objectWithStructures.structureOne.或者,我可以做getters:添加像public int [] [] [] getStructureOne()这样的方法.
有一个getter是否复制了多维数组?或者它通过引用传递它,你只是不能改变引用的对象?
我担心记忆和表现.但是,如果不使数据结构公开,那么将数据结构公之于众,看起来就像编写糟糕的编码实践一样.
ADDENDUM:所以当我使用getter方法返回对象(例如数组)的引用时,是否可以使用getter方法编辑该对象?或者它是否以某种方式"锁定"进行编辑,以便只有它所在的类可以改变该对象?