null和“”,==和equals()的混用和区别

来源:互联网 发布:小鲜肉演技知乎 编辑:程序博客网 时间:2024/05/17 12:54
提问: if(str == null || "".equals(null))和if(str == null || str.equals(""))有什么区别吗?
今天无意间看到自己之前在百度上回答别人的问题,看了一下,发现不够完美,今天将其进行一番修改并移植到CSDN上,希望对Java初学者能有帮助,如果有更好见解的朋友不妨留言,我们可以互动交流一番。

正题:

如果字符串 str == null 为真,则前者if()中会返回false,后者if()会报空指针异常;
注:在这儿用的是常用的基本类型String为例,当然str也可以代表任何Java中的固有类型和自定义的类型,而equals()则代表的是对应str的类型中的方法和属性。

当str == null 时,表示 str 没有指向任何实例化的对象(即:str 是没有的实例化的字符串对象,代表着其不能调用String类中的所有方法),在执行str.equal()方法时,虚拟机会发现str不能调用String类型中的方法equals(),所以返回异常,表明这是一个需要引起注意的地方;反过来 "".equals(str),""不为null,而是一个字节长度为0的字符串对象,其可以调用String类中的所有属性和方法,所以不会抛出异常,一个(即:“”,是一个长度为零的实例对象)不为空,一个(即:null)为空,所以会返回false;

再有,写 str == null 没有错,但是最好养成 null == str 的习惯,因为 null ==str 永远不会产生空指针异常,但 str == null 的很容易产生,这也是极限编程建议的写法!
谢谢阅读!有更好解释的朋友可以留言交流交流!