日期:2014-05-20  浏览次数:20808 次

【向ZangXT提问】循环中使用的局部变量,一般是在循环内部声明?还是在循环外部声明?
例如下面这个打印一串数字的程序,需要在每个偶数后面标记一个星号,一种方法是把表示星号的变量mark声明在循环内部:
Java code

class Test
{
  public static void main(String[] args)
  {
    for (int i = 1; i <= 10; i++)
    {
      String mark = "";
      if (i % 2 == 0)
        mark = "*";
      System.out.println(i + mark);
    }
  }
}



另一种方法是,声明在循环外部:
Java code

class Test
{
  public static void main(String[] args)
  {
    String mark;
    for (int i = 1; i <= 10; i++)
    {
      mark = "";
      if (i % 2 == 0)
        mark = "*";
      System.out.println(i + mark);
    }
  }
}



这两种方法,哪一种比较规范呢?或者说哪一种效率较高?

------解决方案--------------------
应该放在循环里面,尽量让局部变量的作用域小一些。仅仅在循环里面用的就尽量不要放到外面,在这个例子中是没有效率的差别的 。
------解决方案--------------------
如果是我,绝对放在外面,至少可是少生成许多的局部变量。

虽然你这里用的是String的不可修改类。
------解决方案--------------------
探讨
可是如果放到循环里面去了,那么每一次循环都要在栈中创建一个新的变量mark,走完一次后,该变量被销毁,然后下一次循环又重新创建一个,如此反复。。。
相比较,如果放在循环外面的话,新变量mark只是创建一次,以后的每次循环都只是赋不同的值而已,这样看来,放在外面会不会更节约呢?

------解决方案--------------------
汗 点了一下写了半天的东西没了 o(>_<)o ~~

简单的说下
写在外部大家都明白
写在内部的时候
第一次循环
String mark;
编译器就建立了一个局部变量mark
又一次循环开始
编译器发现String mark;
又有一个局部变量mark
编译器就直接把这个局部变量mark拿来用