当从对象中的数组中获取元素时,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]。