首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么JVM检查Java object equality (==)?

什么JVM检查Java object equality (==)?
EN

Stack Overflow用户
提问于 2015-08-27 13:44:13
回答 4查看 185关注 0票数 0

JVM检查对象相等性(==)是什么?它是两个对象的hashCode还是别的什么?

EN

回答 4

Stack Overflow用户

发布于 2015-08-27 13:47:11

==运算符仅检查引用是否相等。它不会调用对象上的任何方法...它只检查所涉及的两个引用是否相等,即它们引用相同的对象。

在简单的情况下,我认为这只是一个以位方式比较引用的问题-检查它们是否包含相同的字节。对于更复杂的环境(例如"compressed oops"),为了比较不同的表示,可能会涉及到稍微多一点的工作。但是内部引用实际上是某种类型的指针,它只是比较两个指针的问题。

票数 3
EN

Stack Overflow用户

发布于 2015-08-27 13:47:52

==用于比较对象引用。它只是检查两个对象是否指向相同的引用。

票数 0
EN

Stack Overflow用户

发布于 2015-08-27 13:54:41

引用相等而不是hashCode的相等运算符(==)测试

代码语言:javascript
复制
public static void main(String[] args) {

    MyClass obj1=new MyClass();

    MyClass obj2=new MyClass();   //obj1 and obj2 refers two different location

    System.out.println("obj1= "+obj1+"\tobj2="+obj2);
    if(obj1==obj2){   // so return false.
        System.out.println("obj1==obj2");
    }else{
        System.out.println("obj1!=obj2");
    }

    System.out.println(obj1.hashCode()+"\t"+obj2.hashCode());

    }

class MyClass{}

输出:

代码语言:javascript
复制
obj1= com.think.test.MyClass@1e9cb75    obj2=com.think.test.MyClass@2c84d9
obj1!=obj2
hashCode
obj1=32099189   obj2=2917593

编辑

代码语言:javascript
复制
class EqualityTest {

     @Override
     public int hashCode(){ 
         return 1; 
     } 
     public static void main(String... arg){
         EqualityTest t1 = new EqualityTest(); 
         EqualityTest t2 =t1;  // t2 referring to t1.
         System.out.println(t1); 
         System.out.println(t2); 
         System.out.println(t1.hashCode());
         System.out.println(t2.hashCode()); 
         System.out.println(t1==t2);  // so it return true.
         } 
}

输出:

代码语言:javascript
复制
com.think.test.Test9@1
com.think.test.Test9@1
1
1
true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32241513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档