2

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

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

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

3 回答 3

4

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

于 2012-06-19T19:12:05.187 回答
2

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

于 2012-06-19T19:09:45.153 回答
0

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

于 2012-06-19T20:08:59.023 回答