为什么使用void方法打开文件不会打开它?

时间:2014-11-07 15:59:14

标签: java io

我定义了方法:

Public static void openFile(String fileName, PrintWriter stream) throws FileNotFoundException 
{
    stream = new PrintWriter (fileName);
} 

我称之为方法:

PrintWriter toFile = null;
    try 
    {
       openFile ("data.txt", toFile);
    }

为什么在执行openFile之后,toFile的值仍为空?

2 个答案:

答案 0 :(得分:1)

当您通过toFile时,您正在传递对PrintWriter的引用。但是引用本身会被复制:方法中的toFile是对同一个对象的引用,但它是一个不同的引用。

修改方法内的toFile会更改此副本,但不会更改原始副本。当方法终止时,副本会被丢弃。

这是故意的,它可以保护你。将参数传递给方法时,您应该能够依赖该参数而不进行更改。如果我执行

doSomethingToElement(i);

其中i是某事物的索引,我真的不希望在方法内部更改i的值。

它还有助于编译器优化。

在C中,您可以传递指向引用的指针,以便可以在方法内部进行更改,或者如果您不希望它会发生更改,则可以传递引用。但是在Java中,一切都是按价值传递的。

请注意,这些概念需要仔细考虑:toFile是一个引用,但您要通过值传递

答案 1 :(得分:1)

Java中的参数是passed by value,而不是引用。因此,当您在方法中分配流时,它仅适用于您所使用的方法,并且不会设置您传入的变量的值。