java中的不确定性!=使用!equals

时间:2017-03-15 10:02:51

标签: java string exception equals

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

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)

有人请解释为什么它给出了上述代码的例外。 此外,如果(a!= b)和!a.equals(b)是否相同?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

检查空值时,请不要使用.equals(),因为它可能会像您的情况一样返回NullPointerException。