一个个人感觉疑惑的效率问题
Java中假设存在一个2维数组
byte[][] byteArr;
int i,n;
byte a,d;
long lsum;
请猜下面2段代码效率哪个高?
代码1
a = byteArr[i][n];
if(a > 0 && a < 10)
lsum += a;
代码2
a = byteArr[i][n];
d = (byte)(Math.abs(a - 5));
if(d < 5)
lsum += a;
以上在计算量超大的时候进行的测试。
如下测试代码
Random rnd = new Random();
long lsum = 0;
byte[][] byteArr = new byte[2000][1000];
for(int i = 0; i < 2000; i++)
{
for(int n = 0; n < 1000; n++)
{
byteArr[i][n] = (byte)(rnd.nextInt());
}
}
byte a = 0;
byte d = 0;
long t11 = new Date().getTime();
for(int t = 0; t < 2000; t++)
{
for(int i = 0; i < 1000; i++)
{
for(int n = 0; n < 1000; n++)
{
a = byteArr[i][n];
if(a > 0 && a < 10)
lsum += a;
}
}
}
long t12 = new Date().getTime();
long t21 = new Date().getTime();
for(int t = 0; t < 2000; t++)
{
for(int i = 0; i < 1000; i++)
{
for(int n = 0; n < 1000; n++)
{
a = byteArr[i][n];
d = (byte)(Math.abs(a - 5));
if(d < 5)
lsum += a;
}
}
}
long t22 = new Date().getTime();
System.out.println("t11 - t12: " + (t12 - t11));
System.out.println("t21 - t22: " + (t22 - t21));
结果是第一段的执行时间几乎是第2段的2.5倍。
本人对Java底层了解不深,特此求解。 Java 测试 效率 二维数组
[解决办法]
为什么我的测试结果是大约5:8的时间?