【发布时间】:2016-02-20 05:44:55
【问题描述】:
我正在和一个同事一起做一个简单的编码练习,我们偶然发现了这个问题。
程序要求概述了如果第三个命令行参数是“a”,则输出文件应附加,而不是替换。
所以,他的代码是这样的:
import java.io.FileWriter;
import java.io.IOException;
public class MyFileWriter {
public static void main(String[] args) {
//...
try {
FileWriter fw = new FileWriter("testfile");
if(args[2].equals("a")) {
fw = new FileWriter("testfile", true);
}
else if(args[2].equals("r")) {
fw = new FileWriter("testfile");
}
}
catch(IOException e) {
System.out.println(e.getMessage());
}
}
}
我知道在 if 语句之前初始化 FileWriter 是多余的,但这就是它的设置方式。我们使用第三个命令行参数“a”运行它,并且 if 语句运行成功。但是,FileWriter 对象并未按预期附加到文件中。
我们将FileWriter 的初始声明更改为以下内容:
FileWriter fw = null;
然后它起作用了。我认为它必须是某种引用或指针问题,但为什么呢?从理论上讲,赋值运算符应该覆盖事物所指向的任何值,因此即使初始化它开始是多余的,它也应该完全覆盖对象。
有人知道为什么这是个问题吗?我只是好奇。
【问题讨论】:
-
因为
new FileWriter("testfile");会立即覆盖该文件,即使它存在并替换为一个空文件。
标签: java pointers reference filewriter