我定义了方法:
Public static void openFile(String fileName, PrintWriter stream) throws FileNotFoundException
{
stream = new PrintWriter (fileName);
}
我称之为方法:
PrintWriter toFile = null;
try
{
openFile ("data.txt", toFile);
}
为什么在执行openFile之后,toFile的值仍为空?
答案 0 :(得分:1)
当您通过toFile
时,您正在传递对PrintWriter
的引用。但是引用本身会被复制:方法中的toFile
是对同一个对象的引用,但它是一个不同的引用。
修改方法内的toFile
会更改此副本,但不会更改原始副本。当方法终止时,副本会被丢弃。
这是故意的,它可以保护你。将参数传递给方法时,您应该能够依赖该参数而不进行更改。如果我执行
doSomethingToElement(i);
其中i
是某事物的索引,我真的不希望在方法内部更改i
的值。
它还有助于编译器优化。
在C中,您可以传递指向引用的指针,以便可以在方法内部进行更改,或者如果您不希望它会发生更改,则可以传递引用。但是在Java中,一切都是按价值传递的。
请注意,这些概念需要仔细考虑:toFile
是一个引用,但您要通过值传递。
答案 1 :(得分:1)
Java中的参数是passed by value,而不是引用。因此,当您在方法中分配流时,它仅适用于您所使用的方法,并且不会设置您传入的变量的值。