[英]When is it appropriate to use reference equality vs object equality in Java?
我理解这两个术语之间的区别以及如果要检查两个对象是否具有引用或相同值,您将使用哪些方法。 我的问题是,你何时需要检查两个对象是否具有相同的引用,而不是检查两个对象是否具有相同的内容或值(从来没有时间我必须检查两个对象是否具有相同的内容或值参考)?
这不是真正“而不是”相等检查,但您可以在执行性能和无效安全原因的相等性检查之前进行引用检查。
实际上,当你调用Objects.equals(a,b)
而不是a.equals(b)
时会发生这种情况。
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
好吧,从我的头脑中出现了许多情况。 首先是调试以确保您没有创建多个实例或将相同的内容添加到多个变量,第二个可能是在游戏设计/游戏模型(例如Minecraft)中查看是否将相同的块放置在某处,第三是使用api时,可以在那里使用很多。 即使你没有使用过这个功能,也总是很高兴知道你拥有它:)。
从来没有一次我必须检查两个对象是否有引用
这意味着你从来没有重写equals()
方法(或正确)。
引用相等是Object相等的一部分。如果被比较的引用指向同一个Object,则仅使用==减少进一步的比较,如果为true则不进一步比较。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
--
--
你的观点是对的。 你需要使用==
运算符来比较大多数时候的原语。 还有另一种情况,你可以比较你的对象的引用,比如说你已经洗了你的列表而你想获得一个特定的对象,所以你需要检查你的对象引用,但这通常是一个小问题。
想象一下 ,Java支持运营商重载的世界。 你的问题的答案将完全不同。 让我提醒您为什么Java不支持运算符重载:
我遗漏了操作符重载作为一个相当个人的选择,因为我看到有太多人在C ++中滥用它。
詹姆斯戈斯林。 资料来源: http : //www.gotw.ca/publications/c_family_interview.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.