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

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

在Java中,我被告知在进行空检查时应该使用==而不是.equals()。这是什么原因?



繁星点点滴滴
浏览 1275回答 3
3回答

隔江千里

他们是两个完全不同的东西。==比较变量包含的对象引用(如果有)。.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

慕娘9325324

如果你援引.equals(),null你就会得到NullPointerException因此,在调用适用的方法之前,始终建议检查nullityif(str!=null && str.equals("hi")){  //str contains hi}

达令说

从Java 1.7开始,如果你想比较两个可能为null的对象,我推荐这个函数:Objects.equals(onePossibleNull, twoPossibleNull)java.util.Objects此类包含用于对对象进行操作的静态实用程序方法。这些实用程序包括null-safe或null-tolerant方法,用于计算对象的哈希代码,返回对象的字符串以及比较两个对象。自:1.7
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java