直接修改对象与通过复制的实例间接修改对象(然后使原始实例与之相等)



copy->modify->copy back方法的开销是多少?假设我有一个对象,它有几个方法和5个二维1000*1000数组。每隔10-100ms复制一个这样的对象进行计算是否是一种好的做法?我想不会,但我的代码看起来会整洁10倍。

是否有一些秘密技术可以通过不进行实际复制来实现这一点,只需为对象使用一些"不同的短名称"(而不是原来的超长路径)?

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;

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

最新更新