Java 为什么使用void方法打开文件却无法打开它?

Java 为什么使用void方法打开文件却无法打开它?,java,io,Java,Io,我定义方法: Public static void openFile(String fileName, PrintWriter stream) throws FileNotFoundException { stream = new PrintWriter (fileName); } 我称之为方法: PrintWriter toFile = null; try { openFile ("data.txt", toFile); } 为什么在执行

我定义方法:

Public static void openFile(String fileName, PrintWriter stream) throws FileNotFoundException 
{
    stream = new PrintWriter (fileName);
} 
我称之为方法:

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

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

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

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

这是故意的,是为了保护你。当您将一个参数传递给一个方法时,您应该能够依赖该参数而不改变它。如果我执行

doSomethingToElement(i);
如果
i
是某事物的索引,我真的不希望
i
的值在方法内部发生变化

它还可以帮助编译器进行优化

在C语言中,您可以传递一个指向引用的指针,以便在方法内部对其进行更改,或者如果不希望引用发生更改,您也可以只传递引用。但在Java中,一切都是按值传递的


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

参数是Java格式的,而不是通过引用。因此,当您在方法中指定stream时,它只与您所在的方法相关,不会设置传入的变量的值。

为什么不返回
PrinterWriter
,而不是将其用作参数?是的,我可以。但我只是想尝试一下void方法。