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
慕娘9325324
TA贡献1783条经验 获得超4个赞
如果你援引.equals()
,null
你就会得到NullPointerException
因此,在调用适用的方法之前,始终建议检查nullity
if(str!=null && str.equals("hi")){ //str contains hi}
达令说
TA贡献1821条经验 获得超6个赞
从Java 1.7开始,如果你想比较两个可能为null的对象,我推荐这个函数:
Objects.equals(onePossibleNull, twoPossibleNull)
java.util.Objects
此类包含用于对对象进行操作的静态实用程序方法。这些实用程序包括null-safe或null-tolerant方法,用于计算对象的哈希代码,返回对象的字符串以及比较两个对象。
自:1.7
添加回答
举报
0/150
提交
取消