直接修改对象与通过复制的实例间接修改它(然后使原始内容等于它)

时间:2014-08-30 10:21:45

标签: java performance object copy

copy-> modify-> copy back方法的开销是多少?假设我有一个对象有两个方法和5个2维1000 * 1000数组。将这样的对象复制到每10-100ms计算一次是一个好习惯吗?我猜不是,但我的代码看起来要整整10倍。

是否有一些秘密技术可以通过实际复制来实现这一点,只需对对象使用一些“不同的 - 短名称”(而不是原始的非常长的路径)?

1 个答案:

答案 0 :(得分:0)

Java通过引用工作,除非您明确请求副本(例如,通过实例方法),否则永远不会获得具有赋值运算符的非基本类型的副本。实际上它在值上工作,在引用上:有效分配(和复制)的是堆上对象的引用。

我的意思是,如果你有

YourObject o = otherComplex.path.to.a.different.variable;

正在发生的事情是o是另一个变量的别名,它们都引用堆上的同一个对象,因此它们都具有相同的性能含义。

您既不需要将其分配回去,例如

YourObject o = otherComplex.path.to.a.different.variable;
o.method();
o.field = ...;
otherComplex.path.to.a.different.variable = o;

这是不必要的,因为您只需重新分配已经等效的值。