java - 为什么要将 && 更改为 ||导致变量不可见

标签 java file loops while-loop

我正在做一些读取文件的练习,我的任务是为不平衡的文件编写文件交错代码。所以如果我像这样设置它就可以正常工作:

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/

相关文章:

java - hibernate :如何选择表中的所有行

Java - 如何避免周期性操作执行重叠

file - Mule 文件传输不删除源文件

java - Java 中的 while 循环

javascript - 根据值处理 JSON 对象/数组

java - 关于JTextArea的简单问题

java - 如何同步Oracle数据库中的两个表?

c - 如何使用 FILE* 作为其 stdin、stdout 或 stderr 创建子进程?

Python:如何读取列数不均匀的数据文件

sql - 如何在 SQL 中的循环中进行循环,类似于 for-each 循环?