Java如何为构造函数中声明的对象和变量命名的对象分配内存?

时间:2012-06-19 19:08:49

标签: java

使用Java IO流,我们经常将对象仅用作其他对象的构造函数。我对这种前景的记忆含义感兴趣。例如,在执行相同操作的这两个语句中,内存分配有何不同?

FileInputStream inputFile = new FileInputStream("filepath");
Scanner inStream = new Scanner(inputFile);

Scanner inStream = new Scanner(new FileInputStream("filepath"));

3 个答案:

答案 0 :(得分:4)

第一个将在当前堆栈帧中分配一个命名变量。在堆上,没有区别 - 或者不应该有,但只要遵守规则,VM当然可以以某种方式自由地优化代码。

答案 1 :(得分:2)

没有区别。两者都是一样的。

答案 2 :(得分:0)

在第一个示例中,JVM保留FileInputStream的引用,而第二种方式是JVM创建一个未引用的对象,该对象在执行语句后可以进行垃圾回收。