清单 7. 将循环变量移入循环

int high = 1; 
int low = 1; 
int tmp; 
for (int i = 1; i < 20; i++) { 
    System.out.println(high); 
    tmp = high; 
    high = high+ low; 
    low = tmp; 

到这里还没有结束,经验丰富的 Java 程序员还会将 tmp 变量移入循环,如清单 8 所示: 
清单 8. 在循环内声明临时变量

int high = 1; 
int low = 1; 
for (int i = 1; i < 20; i++) { 
    System.out.println(high); 
    int tmp = high; 
    high = high+ low; 
    low = tmp; 

某些极度追求速度而又不够老练的开发人员有时会提出反对意见,认为这种做法导致循环内执行过多操作,而不只是必要的操作,从而降低代码运行速度。实际上,在运行时,声明根本不会执行。将声明移动到循环内绝不会给 Java 平台造成负面的性能影响。
粗体的这句话怎么理解?

解决方案 »

  1.   

    实际上,在运行时,声明根本不会执行。
    指的是int tmp = high; 与tmp = high;执行的内容是一样的。 
    不知道对不对,看起来好像不对。
      

  2.   

    int tmp 在每次循环至此的时候不会被重复声明??
      

  3.   

    和编译器没有关系,都是用的jdk进行编译的
      

  4.   

    你还明白,jdk的版本和厂商也都是不一样的?~
      

  5.   

    看看 c语言 int i;的汇编 就知道啦 ,声明变量i 没有赋值的话 在汇编中只有空间 没有操作 ,等真正调用i时(赋值或用算)才引用i地址的内存进行操作
      

  6.   


    是的,如果采用了优化的写法,即使没有选择友好的编译器,也能得到比较高效的class。