当从对象中的数组中获取元素时,Java是否必须读取整个数组?

当从对象中的数组中获取元素时,Java是否必须读取整个数组?,java,performance,Java,Performance,例如,给定以下方法: public double[] getCoord(){ return coord; } public double getCoord(int variable){ return coord[variable]; } 打电话好吗 object.getCoord()[1] 或 为什么呢?尽管没有性能差异,但第二种方法提供了一个非常优秀的API,因为Java数组总是可变的。第一个API允许用户编写 object.getCoor

例如,给定以下方法:

    public double[] getCoord(){
        return coord;
}

    public double getCoord(int variable){
        return coord[variable];
}
打电话好吗

object.getCoord()[1]


为什么呢?

尽管没有性能差异,但第二种方法提供了一个非常优秀的API,因为Java数组总是可变的。第一个API允许用户编写

object.getCoord()[1] = 12.345;

并在背后修改对象的内部结构。这从来都不是一件好事:即使是非恶意用户也可能会做一些你从来没有想过的事情,仅仅是因为错误。

尽管没有性能差异,但第二种方法提供了一个非常优秀的API,因为Java数组总是可变的。第一个API允许用户编写

object.getCoord()[1] = 12.345;

并在背后修改对象的内部结构。这从来都不是一件好事:即使是非恶意用户也可能会做一些你从未想过的事情,仅仅是因为错误。

不,当你使用下标操作符(
[]
)时,Java不会读取整个数组。至于使用accessor方法首先获取数组,然后索引到数组中是否比调用做同样事情的方法更好,这可能可以忽略不计。调用函数并返回结果的开销仍然很小。

否,使用下标运算符(
[]
)时,Java不会读取整个数组。至于使用accessor方法首先获取数组,然后索引到数组中是否比调用做同样事情的方法更好,这可能可以忽略不计。调用函数并返回结果的开销(请注意,这是最小的)仍然存在。

就性能而言,这并不重要。第一个方法返回对数组的引用,而不是副本


也就是说,第二种方法可以防止数组在类外被修改。

就性能而言,这并不重要。第一个方法返回对数组的引用,而不是副本

这就是说,第二个方法可以保护数组不被类外修改。

我猜#2稍微慢一点,因为在调用getCoord(int)之前必须将参数推送到堆栈上。不过里面没什么

两者都不必读取整个数组

两者都比直接数组访问慢,例如coord[1]。

我猜#2稍微慢一点,因为在调用getCoord(int)之前必须将参数推送到堆栈上。不过里面没什么

两者都不必读取整个数组


两者都比直接数组访问慢,例如coord[1]。

您的第一次调用应该读取object.getCoord()[1]而不是object.getCoord[1]。您的第一次调用应该读取object.getCoord()[1]而不是object.getCoord[1]。