很抱歉出现菜鸟问题。传递引用与值(value)很难!
所以我有一类具有很大的数据结构的多维数组。我需要从另一个类访问这些数组。我可以只公开数组并执行经典的objectWithStructures.structureOne。或者,我可以做 setter/getter :添加诸如public int [] [] [] getStructureOne()之类的方法。
拥有 setter/getter 是否可以复制多维数组?还是它通过引用传递了它,而您只是不能更改引用的对象?
我担心内存和性能。但是,将数据结构公开,虽然如果不导致制作副本会更快,但似乎是不好的编码习惯。
附录:因此,当我使用getter方法返回对某个对象(例如数组)的引用时,使用getter方法的任何人都可以编辑该对象吗?还是以某种方式“锁定”进行编辑,以便只有其所在的类才能更改该对象?
最佳答案
实际上,在Java中,从技术上讲,所有内容都是按值传递,因为引用是内存地址的值,但是您可以将其视为按引用传递。
至于性能,我怀疑是否存在可测量的差异,因为JVM JIT编译器可能会内联访问器方法(“getter”)。就样式而言,最好使用getter优先于公开您的字段。
至于安全发布(允许安全访问私有(private)数据)-不,对象不是“锁定在只读模式”;它是完全可编辑的,因为数组是可变的。
为了安全地允许访问数据数组,您基本上有两种选择:
提供API的示例可能是:
public int getStructureOne(int x, int y, int z) {
return structureOne[x][y][z];
}
该方法是完全安全的,因为基元(如
int
)是通过值传递的-调用者更改此方法的结果所分配到的变量的值,数组不会发生任何变化。关于java - Java:getter方法与公共(public)实例变量:性能和内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12468813/