我正在做一些读取文件的练习,我的任务是为不平衡的文件编写文件交错代码。所以如果我像这样设置它就可以正常工作:
while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null **&&** (inputLine2 = LineSequential.read(inFileStreamName2)) != null)
注意 &&... 但如果我将其更改为 || netbeans 声明 inputLine2 尚未初始化(尽管它以这种方式看到 inputLine1 非常好):
while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null **||** (inputLine2 = LineSequential.read(inFileStreamName2)) != null)
现在,如果 inputLine1(这是来自文件 A 的数据)首先变为 null,我只会获取 inputLine2(来自文件 B)中的每隔一行。在每次循环迭代中,它都会跳过一行。我相当确定它与我初始化 inputLine2 的位置有关..:
while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null || LineSequential.read(inFileStreamName2) != null) {
inputLine2 = LineSequential.read(inFileStreamName2);
System.out.println(inputLine2);
if(inputLine1 != null && inputLine2 == null){
LineSequential.write(outFileStreamName, inputLine1);
}else if(inputLine1 == null && inputLine2 != null){
LineSequential.write(outFileStreamName, inputLine2);
}
else if(inputLine1 != null && inputLine2 != null){
LineSequential.write(outFileStreamName, inputLine1);
LineSequential.write(outFileStreamName, inputLine2);
}
}
最佳答案
Java 做 lazy/short-circuit evaluation .当您更改为 ||
时,它所关心的只是确保一个为真。如果第一个条件为真,它将停止查看其余条件,使该变量为空。
一个好的经验法则是永远不要在条件语句中初始化变量,事情会变得一团糟。
关于java - 为什么要将 && 更改为 ||导致变量不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45988819/