【问题标题】:Modifying an object directly vs modifying it indirectly through a copied instance (and then making the original equal to it)直接修改对象与通过复制实例间接修改对象(然后使原始对象等于它)
【发布时间】:2014-08-30 10:21:44
【问题描述】:
copy->modify->copy back 方法的开销是多少?假设我有一个对象,它有几个方法和 5 个二维 1000*1000 数组。复制这样的对象以每 10-100 毫秒计算一次是否是一种好习惯?我猜不是,但我的代码看起来会整洁 10 倍。
是否有一些秘密技术可以通过不实际复制来实现这一点,只需为对象使用一些“不同的 -short-name”(而不是原来的很长的路径)?
【问题讨论】:
标签:
java
performance
object
copy
【解决方案1】:
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;
这是不必要的,因为您只是重新分配已经相等的值。