Java 如何为构造函数中声明的对象和由变量命名的对象以不同的方式分配内存



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

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

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

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

没有区别。两者是相同的。

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

最新更新