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

时间:2015-08-05 15:32:42

标签: java file file-io java-8 java-7

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

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

我要做的是复制对File对象的引用。我不想复制,我不确定上面的代码是复制引用还是复制对象。我正在努力避免内存泄漏或孤儿,特别是如果我要从代码中删除文件。

谢谢。

3 个答案:

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

    // ...