如何在 Java 中复制对 File 对象的引用

How to copy a reference to a File object in Java

File file = new File ("image.gif");

// Is this a copy, a reference, or something else?
File File2 = file;

我想做的是复制对 File 对象的引用。我不想复制,我不确定上面的代码是复制引用还是复制对象。我试图避免内存泄漏或孤儿,尤其是当我要从代码中删除文件时。

谢谢。

您刚才所做的是:您创建了另一个变量 File2,它指向 上完全相同的对象。 没有创建新对象!

如果您要操作任何变量,您将操作 上的相同对象。在此过程中不会创建新的。仅使用 new 关键字(或一些反射,但现在超出范围)创建一个新对象。


此外,请务必阅读变量创建位置、对象在程序运行时驻留的位置以及什么是 heapstack (搜索:"java heap vs stack")。

一个File对象是

An abstract representation of file and directory pathnames.

这只是一个奇思妙想 String(具有与文件系统交互的方法)。

file 是一个变量。变量保存值。由于这是一个引用类型变量,它保存着引用值。

new File ("image.gif");是创建新对象并产生引用值(引用新创建的对象)的表达式。

File2 是另一个变量。当您执行作业时

File File2 = file;

存储在file中的值被复制,副本存储在File2中。

这与将参数值绑定到方法参数的概念相同,讨论于:

  • Is Java "pass-by-reference" or "pass-by-value"?

复制文件对象:

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());
    }

    // ...