变量放在循环体内仍是外

   阅读
变量放在循环体内还是外?

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {
String name = "stephen "+i;
System.out.println(name);
}

String name = null;
for (int i = 0; i < 10; i++) {
name = "stephen "+i;
System.out.println(name);
}
}

可以从性能、规范或安全上讲那样更好
------解决思路----------------------
理论上是下面那样好些, 但这样些怪怪的不如第一种直观。  建议第一种写法
------解决思路----------------------
引用:
Quote: 引用:

个人认为第二种吧,第一种每次都要重新分配地址,第二中分配一次,后面只是该值

每一种都是重新分配地址。 
性能和安全上完全一样。 规范上没有针对这个问题的普适规范。
这样啊,又学到了
------解决思路----------------------
要尽量缩小变量的作用范围,作用范围越大出错的可能性就越大。所以还是第一种好
------解决思路----------------------
建议第二种吧,虽说String和其他类不太一样,但是重新声明String的话还会在堆栈里开辟一块位置存放地址的
------解决思路----------------------
对于一个对象而言,还是被声明在循环体外好,要不然每次执行循环体时都会为对象重新分配内存并初始化对象实例。初始化过程并不会占用过多的时间,但是内存分配会。对于基本数据类型而言,则更多地是个人选择习惯问题,不过为了和第一种一致,还是习惯放在循环体外。
------解决思路----------------------
兄弟们,别争论了,这事我经历过。结论是两种性能一样。
因为java编译器会将第第一种优化成第二种,所以性能一样。
但是写第一种会更直观和更简单,易于维护。
所以大家写的时候,尽管按照第一种写吧,也不用担心性能问题。担心性能的,都是老旧的不知道几百年前的编译器了!
------解决思路----------------------
特别推荐第一种!

其实两种情况都会去申请新的内存,这是JAVA机制造就的。

而缩小变量的作用域,就意味着:
1. 变量能更早的被回收
2. 减少错误的概率

所谓推荐第二种的,完全是不了解内存分配机制吧
------解决思路----------------------
推荐第一种,建议尽可能缩小变量的作用域。

不过在你这个问题上面,两种方法并没有明显的优劣,只是编程习惯问题。
阅读