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方法。