Java:getter方法与公共实例变量:性能和内存

use*_*455 6 java performance memory-management

抱歉没有问题.通过引用与价值相结合很难!

所以我有一个具有相当大的数据结构的类 - 多维数组.我需要从另一个类访问这些数组.我可以将数组公开并执行经典的objectWithStructures.structureOne.或者,我可以做getters:添加像public int [] [] [] getStructureOne()这样的方法.

有一个getter是否复制了多维数组?或者它通过引用传递它,你只是不能改变引用的对象?

我担心记忆和表现.但是,如果不使数据结构公开,那么将数据结构公之于众,看起来就像编写糟糕的编码实践一样.

ADDENDUM:所以当我使用getter方法返回对象(例如数组)的引用时,是否可以使用getter方法编辑该对象?或者它是否以某种方式"锁定"进行编辑,以便只有它所在的类可以改变该对象?

Joh*_*ner 1

一切都是按传递,但 getter 将返回对数组的引用,不涉及副本。

任何修改的人都会被引用该数组的每个人看到。

至于1)性能,了解的唯一方法是进行基准测试。get 方法会增加开销,但如果您的结构很大,则对结构中元素的任何访问都会使添加的方法调用的任何开销相形见绌。

至于2)糟糕的编码实践,这实际上取决于你在做什么。您的代码是否需要确保它不能被其他人修改?然后返回一份副本。或者更好的是,强制调用者请求一定范围的数据,并且只返回他们需要的范围的副本。

  • 据我所知,纯简单的 getter 在运行时由 JIT 内联,避免了开销。 (2认同)