为了账号安全,请及时绑定邮箱和手机立即绑定

Java null检查为什么使用==而不是.equals()

Java null检查为什么使用==而不是.equals()

繁星点点滴滴 2019-08-27 10:39:26
Java null检查为什么使用==而不是.equals()在Java中,我被告知在进行空检查时应该使用==而不是.equals()。这是什么原因?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

他们是两个完全不同的东西。==比较变量包含的对象引用(如果有)。.equals()检查两个对象是否相等,根据他们的契约来确定平等意味着什么。根据合同,两个不同的对象实例完全可能“相等”。然后有一个小细节,因为equals是一个方法,如果你尝试在引用上调用它null,你会得到一个NullPointerException

例如:

class Foo {
    private int data;

    Foo(int d) {
        this.data = d;
    }

    @Override
    public boolean equals(Object other) {
        if (other == null || other.getClass() != this.getClass()) {
           return false;
        }
        return ((Foo)other).data == this.data;
    }

    /* In a real class, you'd override `hashCode` here as well */}Foo f1 = new Foo(5);Foo f2 = new Foo(5);System.out.println(f1 == f2);// outputs false, they're distinct object instancesSystem.out.println(f1.equals(f2));// outputs true, they're "equal" according to their definitionFoo f3 = null;System.out.println(f3 == null);// outputs true, `f3` doesn't have any object reference assigned to itSystem.out.println(f3.equals(null));// Throws a NullPointerException, you can't dereference `f3`, it doesn't refer to anythingSystem.out.println(f1.equals(f3));// Outputs false, since `f1` is a valid instance but `f3` is null,// so one of the first checks inside the `Foo#equals` method will// disallow the equality because it sees that `other` == null


查看完整回答
反对 回复 2019-08-27
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

如果你援引.equals()null你就会得到NullPointerException

因此,在调用适用的方法之前,始终建议检查nullity

if(str!=null && str.equals("hi")){
 //str contains hi}



    查看完整回答
    反对 回复 2019-08-27
    ?
    达令说

    TA贡献1821条经验 获得超6个赞

    从Java 1.7开始,如果你想比较两个可能为null的对象,我推荐这个函数:

    Objects.equals(onePossibleNull, twoPossibleNull)

    java.util.Objects

    此类包含用于对对象进行操作的静态实用程序方法。这些实用程序包括null-safe或null-tolerant方法,用于计算对象的哈希代码,返回对象的字符串以及比较两个对象。

    自:1.7


    查看完整回答
    反对 回复 2019-08-27
    • 3 回答
    • 0 关注
    • 1274 浏览

    添加回答

    举报

    0/150
    提交
    取消
    意见反馈 帮助中心 APP下载
    官方微信