File file = new File ("image.gif");
// Is this a copy, a reference, or something else?
File File2 = file;
我要做的是复制对File对象的引用。我不想复制,我不确定上面的代码是复制引用还是复制对象。我正在努力避免内存泄漏或孤儿,特别是如果我要从代码中删除文件。
谢谢。
答案 0 :(得分:3)
File
对象
文件和目录路径名的抽象表示。
它只是一个花哨的String
(与文件系统交互的方法)。
file
是一个变量。变量保存值。由于这是一个引用类型变量,因此它保存了引用值。
new File ("image.gif");
是一个表达式,它创建一个新对象并生成一个引用值(引用新创建的对象)。
File2
是另一个变量。执行作业时
File File2 = file;
复制存储在file
中的值,副本存储在File2
中。
这与将参数值绑定到方法参数的概念相同,在下面讨论:
答案 1 :(得分:2)
您刚才所做的是:您创建了另一个变量File2
,指向堆上的完全相同的对象。 未创建新对象!
如果你要操纵任何变量,你将操纵堆上的同一个对象。在此过程中不会创建新的。只使用new
关键字(或使用某些反射,但现在已超出范围)创建新对象。
另外,请务必阅读有关变量创建位置,对象在程序运行时期间驻留的位置以及堆和堆栈的内容(搜索: " java heap vs stack")。
答案 2 :(得分:0)
复制文件对象:
File f = new File("home/users", "alice/documents");
File copied = new File(f.getPath());
System.out.println(copied.equals(f)); // true
System.out.println(copied == f); // false
通常,这不是必需的。但是有一种情况可能是有用的是当你想要子类java.io.File时来自File的构造函数时:
public class MyFile extends File {
public MyFile(File path) {
super(path.getPath());
}
// ...