Java的速度更快。直接多次访问数组索引,或者将数组索引的值保存到新变量中并使用它来进行后续计算?
访问索引
if ((shape.vertices[0].x >= fromX && shape.vertices[0].x <= toX) || // left side of shape in screen
(shape.vertices[0].x <= fromX && shape.vertices[0].x + shape.width >= fromX) || // right side of shape in screen
(shape.vertices[0].x >= fromX && shape.vertices[0].x + shape.width <= toX)) { // shape fully in screen
// ...
}
临时变量
float x = shape.vertices[0].x;
float y = shape.vertices[0].y;
if ((x >= fromX && x <= toX) || // left side of shape in screen
(x <= fromX && x + shape.width >= fromX) || // right side of shape in screen
(x >= fromX && x + shape.width <= toX)) { // shape fully in screen
// ...
}
答案 0 :(得分:7)
第二种方法肯定更快。但是,您可以使用final
关键字提供更多帮助:
final float x = shape.vertices[0].x;
final float y = shape.vertices[0].y;
final int rightEdge = x + shape.width;
if ((x >= fromX && x <= toX) || // left side of shape in screen
(x <= fromX && rightEdge >= fromX) || // right side of shape in screen
(x >= fromX && rightEdge <= toX)) { // shape fully in screen
// ...
}
当然不是一个显着的改进(但仍然是一种改进,也使意图明确)。您可以阅读以下讨论:http://old.nabble.com/Making-copy-of-a-reference-to-ReentrantLock-tt30730392.html#a30733348
答案 1 :(得分:2)
从长远来看,声明临时数组会更快,因为jvm在访问数组元素时必须计算偏移量。
使用分析工具,看看哪个更快,您可以使用,但我要提醒的是,除非您正在做一些非常时间敏感的事情,否则这不会是一个巨大的进步。
答案 2 :(得分:1)
通过分析器运行代码以回答用例的问题。
对此的答案可能是特定于JVM的。 Oracle HotSpot JVM的执行方式与OpenJDK或IBM的JDK不同。计时将取决于JVM如何优化字节代码,以及它在运行时决定编译的内容。服务器与客户端模式也可能有所不同。
所以追求可读性。在分析并确定代码部分是问题之后进行优化。
答案 3 :(得分:0)
第二种方法更快,但会消耗更多内存。但性能提升只有纳秒,除非阵列大小很大。
答案 4 :(得分:0)
数组访问速度可能更快。请注意以下程序:
public class ArraySpeedTest{
public static void main(String [] args){
float x = 4.4f;
float [] xArr = new float[1];
xArr[0] = 4.4f;
long time1 = System.nanoTime();
for(int i = 0 ; i < 1000*1000*1000; i++){
if(x > 1 && x < 5){
}
}
long time2 = System.nanoTime();
System.out.println(time2-time1);
long time3 = System.nanoTime();
for(int i = 0 ; i < 1000*1000*1000; i++){
if(xArr[0] > 1 && xArr[0] < 5){
}
}
long time4 = System.nanoTime();
System.out.println(time4-time3);
}
}
OUTPUT :: 5290289 2130667
JVM实现,标志和程序的顺序可以改变几毫秒的性能。
答案 5 :(得分:-1)
我会推荐第二种方法,因为它更强可读,并且有很多可维护性。
性能提升,除非您的阵列很大,但实际上非常小。
另一方面,可读性增益总是很好。