JVM检查对象相等性(==)是什么?它是两个对象的hashCode还是别的什么?
发布于 2015-08-27 13:47:11
==运算符仅检查引用是否相等。它不会调用对象上的任何方法...它只检查所涉及的两个引用是否相等,即它们引用相同的对象。
在简单的情况下,我认为这只是一个以位方式比较引用的问题-检查它们是否包含相同的字节。对于更复杂的环境(例如"compressed oops"),为了比较不同的表示,可能会涉及到稍微多一点的工作。但是内部引用实际上是某种类型的指针,它只是比较两个指针的问题。
发布于 2015-08-27 13:47:52
==用于比较对象引用。它只是检查两个对象是否指向相同的引用。
发布于 2015-08-27 13:54:41
引用相等而不是hashCode的相等运算符(==)测试
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{}输出:
obj1= com.think.test.MyClass@1e9cb75 obj2=com.think.test.MyClass@2c84d9
obj1!=obj2
hashCode
obj1=32099189 obj2=2917593编辑
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.
}
}输出:
com.think.test.Test9@1
com.think.test.Test9@1
1
1
truehttps://stackoverflow.com/questions/32241513
复制相似问题