高原 发表于 2012-7-5 14:00
第一种方法:int i 在for循环外,那么在栈内存中值创建了一个int类型的变量 i,for循环内部只是不断地对其 ...
回答不错,补充下:
第一种方法:int i 在for循环外,作用域在全局
第二种方法:int i 在for循环内部,作用域在for循环内
性能上来说,第一种比第二种好。这段程序确实是这样的,但在实际开发中,在for循环外new出变量不一定比在for循环内new出变量性能好。
理由如下:
1,实际开发中,new出的对象一般都较复杂,很占内存,要提高性能,必须尽可能的避免new出对象
一般都在for循环内加入条件,限制new新对象,这时,第一种方法一定会new出新对象,而第二种方法不一定
会new出对象。
2,从安全上考虑,第一种方法new出对象的作用域范围比第二种大的多,安全漏洞也大,有些重要的信息还是定义在for循环内部较好
3,从JVM的垃圾处理机制上考虑,第一种方法new出对象的生命周期较长,当对象不被这个for循环使用时,还有可能被其他程序使用,导致对象长期占有内存,无法释放资源。
综上所述,实际开发中,要根据需要合理采用代码,一般情况下,使用第二种方法性能较好。 |