为什么要改变&&到|| 导致变量无法看到

Mar*_*den 4 java loops file while-loop

我正在做一些阅读文件的练习,我的任务是为不平衡文件编写File Interleave代码.所以如果我有这样设置的东西它工作正常:

while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null **&&** (inputLine2 = LineSequential.read(inFileStreamName2)) != null) 
Run Code Online (Sandbox Code Playgroud)

注意&& ...但是如果我将它改为|| netbeans声明inputLine2尚未初始化(尽管它以这种方式看到inputLine1非常精细):

while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null **||** (inputLine2 = LineSequential.read(inFileStreamName2)) != null)
Run Code Online (Sandbox Code Playgroud)

现在,如果inputLine1(这是来自文件A的数据)首先变为空,我只得到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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Loa*_*oaf 5

Java进行惰性/短路评估.当你改变||所有它关心的是确保一个是真的.如果第一个条件为真,它将停止查看其余条件,使该变量为null.

一个好的经验法则是永远不要在条件语句中初始化变量,事情会变得混乱.