【问题标题】: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;
    

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

    【讨论】:

    • 谢谢,我这边有严重的误会。
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2020-03-03
    • 2022-01-07
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多