如何在Java中检查两个引用是否持有相同的对象?

时间:2015-08-11 12:57:33

标签: java

我在C / C ++中寻找Java等效的指针比较。

假设我正在从第三方调用类的对象的getSomething()方法。我怎么知道getSomething()的实现是每次只返回相同实例还是返回对象的不同实例? 我想要检查两个对象是否相同,但需要检查它们是否是同一个实例。动机是,如果第三方实现每次都在创建一个新实例,可能我可以通过不每次调用该方法来优化我的代码。假设getSomething()在运行时被我每秒调用1000次

从我从各种文章中读到的内容,我不应该依赖hashCode()。在这种情况下,这样做的方法是什么?

5 个答案:

答案 0 :(得分:7)

当引用类型根据==(标识)运算符等效时,它们“指向”同一个对象。

问题是:

  

我不打算检查两个对象是否相同,但是需要检查它们是否是相同的实例 (强调我的)

你实际上是将平等与身份混合在一起(正如我最初在答案中所做的那样)。作为同一个实例是身份。相同的值是 equality

答案 1 :(得分:1)

public class AllTests : IAssemblyContext { static AllTests() { //Workaround TestSetup(); } public void OnAssemblyStart() { //TestSetup(); //Only in R#8 } public void OnAssemblyComplete() { //Not called in R#9 TestSession.Clean(true); } } 运算符比较两个操作数所持有的值。如果操作数是原始的,则检查实际值是否相等。如果操作数是对象类型,则==检查身份是否相等,在此角色中运行就像Python的==关键字一样。

请注意,原始包装和包装器对象类型之间的自动装箱和自动装箱会导致一点点愚蠢。

答案 2 :(得分:0)

我认为你并不是在寻找==运营商。例如,要比较对象的两个实例,我使用equals()Object方法。以下是两个有关比较的有用链接:

java ==, equals(), compare(), compareTo()

Javadocs equals() method

答案 3 :(得分:0)

==双等运算符用于检查两个引用变量是否保持相同的对象。 例如

java

s1和s2指向同一个对象。 s3保存新创建的对象,因此s1 == s3打印错误

答案 4 :(得分:-1)

如果两个对象具有相同的引用,则可以使用==运算符来比较它们。