java != 中的不确定性与 !equals

Uncertainity in java != with !equals

我写了一个小程序来读取 csv 文件...为此我使用了缓冲 reader... 我的代码如下所示:

package files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import bk.bk;

public class QwithLinkedList{
    public static void main(String args[]) throws Exception{
        FileReader f=new FileReader("G:/bk.csv");
        BufferedReader br=new BufferedReader(f);
        String line;
        while((line=br.readLine())!=(null)){
            System.out.println(line);
        }
    }
}

以上是完美的代码,但我的问题是这段代码出现异常:

package files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import bk.bk;

public class QwithLinkedList{
    public static void main(String args[]) throws Exception{
        FileReader f=new FileReader("G:/bk.csv");
        BufferedReader br=new BufferedReader(f);
        String line;
        while(!(line=br.readLine()).equals(null)){
            System.out.println(line);
        }
    }
}

以上代码的输出是这样的:

a1
bk
abc
def
ghi
jkl
bharath
Exception in thread "main" java.lang.NullPointerException
    at files.QwithLinkedList.main(QwithLinkedList.java:14)

有人请解释为什么上面的代码会出现异常。 此外 if(a!=b) 和 !a.equals(b) 它们不一样吗?

检查 null 时,始终使用 ==!=。如果您要检查的内容为空,则使用 equals 将始终成为 NullPointerException

==equals的区别在于前者检查双方是否指向同一内存地址,后者检查对象是否相等

检查空值时,切勿使用 .equals(),因为它可能 return 像您的情况一样出现 NullPointerException。