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

Java中对象声明时机的疑问
本帖最后由 tianxiexingyun 于 2013-03-14 11:40:40 编辑
对于Java中对象在什么时候声明存在着一些疑问。
比如下面的两个方法:
方法一:

public void test(){
     double tmp = 0;
     for(int i=0; i<10000; i++){
     tmp = Math.random();
                System.out.println(tmp);
     }
    }

方法二:

public void test(){
     for(int i=0; i<10000; i++){
     double tmp = Math.random();
                System.out.println(tmp);
     }
    }


这两个方法实现的功能是一样的。但是变量tmp声明的时机和次数却不一样。我经常使用方法一,以为可以减少声明变量的次数。看了一些资料后,了解到方法一占用内存的时间却比较长。有谁能够详细解释一下这两个方法的区别以及优劣处。

在这两个方法中变量都是基础类型。如果变量改成引用类型后又有什么区别。
Java?对象?内存 java ?对象 内存

------解决方案--------------------
除非是对性能要求极端极端极端极端...极端严格的程序,永远建议使用第二种。当然,如果是对性能很严苛的程序,一般(如果不是全部的话)不会用Java。

上面两种差异,带来的性能上的差别,对于绝大部分应用,完全可以忽略不计。但是,前面一种写法,可能造成的Bug,确实难以承受的。

查看Effective Java: Minimize the Scope of Local Variables
------解决方案--------------------
引用:
并没有什么差别,java调用一个方法前,所有局部变量的内存都已经分配好了,即使写在for里面那个变量也会多次重用,并不存在多次开辟内存空间这种其它某些语言才干的事儿


唯一的差别就是作用域不一样,第一种在for结束了之后还能访问到