使用Java IO流,我们经常将对象仅用作其他对象的构造函数。我对这种前景的记忆含义感兴趣。例如,在执行相同操作的这两个语句中,内存分配有何不同?
FileInputStream inputFile = new FileInputStream("filepath");
Scanner inStream = new Scanner(inputFile);
和
Scanner inStream = new Scanner(new FileInputStream("filepath"));
答案 0 :(得分:4)
第一个将在当前堆栈帧中分配一个命名变量。在堆上,没有区别 - 或者不应该有,但只要遵守规则,VM当然可以以某种方式自由地优化代码。
答案 1 :(得分:2)
没有区别。两者都是一样的。
答案 2 :(得分:0)
在第一个示例中,JVM保留FileInputStream的引用,而第二种方式是JVM创建一个未引用的对象,该对象在执行语句后可以进行垃圾回收。