我为相同的代码获得两个不同的输出。当我调试并逐步遍历每一行时(使用Netbeans 8.1),我得到一个结果。当我一次运行代码时,我得到了不同的结果。
这是代码,
public class Testing {
public static void main(String... args) throws IOException {
BufferedReader file = new BufferedReader(new FileReader("input"));
String str = file.readLine();
System.out.println(str);
}
}
这是输入文件
first
second
third
fourth
在这两种情况下,代码都应打印第一行first
。但只有在我运行代码时才会这样做。
如果我调试代码并逐步执行每一行,则会打印第二行second
。
为什么会这样?
更新 以下是调试截图。现在,如果我跳过它将执行System.out.println行。正如你在右侧看到的那样,str包含'second'。
答案 0 :(得分:11)
您的IDE在调试时是否评估file.readLine()
?在Eclipse中,可以定义完全符合这一要求的“监视表达式”。
这可能解释了您的问题,因为当您逐行浏览代码时,只有一行定义了file
,因此可以评估上面的表达式。因此second
的输出代替first
。
更新:现在你添加了截图,很明显。这部分是Netbean开发人员的错,因为他们在标题中选择了“变量”,这是误导性的,因为评估变量没有副作用,而评估任意表达式(如file.readLine()
)显然有。