一直都有人说Java的位移运算比乘法快,所以我也一直信了,今天突然想起来了,就想试一试,不试不知道,一试吓一跳,原来信了这么长时间的知识,是假的!如有错误请指正。
代码public class Java {
public static void main(String[] args) {
//测试位移操作
long time=0;
for (int r=0;r<100;r++){
int i=1;
long startTime=System.currentTimeMillis();
for (long j=0L;j<5000000000L;j++){
int k = i << 3;
}
long endTime=System.currentTimeMillis();
time=endTime-startTime;
System.out.println(time);
//测试乘法操作
i=1;
startTime=System.currentTimeMillis();
for (long j=0L;j<5000000000L;j++){
int k = i * 8;
}
endTime=System.currentTimeMillis();
time=endTime-startTime;
System.out.println(time);
System.out.println();
}
}
}
结果
2143 1656 1646 1654 1645 1640 1643 1690 1640 1640 1650 1649 1645 1647 1639 1652 1641 1651 1645 1643 1640 1659 1636 1643 1641 1639 1644 1644 1646 1638 1640 1636 1650 1639 1640 1642 1638 1640 1635 1639 1637 1649 1640 1641 1683 1642 1660 1639 1638 1643 1642 1636 1655 1639 1651 1664 1640 1640 1640 1636 1651 1643 1639 1643
试了之后除了第一次时间有点差距,后边的时间都差不多,所以我感觉是jvm做了优化。经过这次之后,看来别人的各种优化代码的手段也不能全信,还是需要自己试一试的。



