只是好奇“==”如何在Java中工作?
我创建了两个类ClassObject1
和ClassObject2
,它们都实现了接口I_Class
在ClassObject1
和ClassObject2
内部,我覆盖hashCode()
和equals()
函数,以确保这两个函数将为这两个类返回完全相同的值。
public interface I_Class {
public String getName();
}
public class ClassObject1 implements I_Class{
private String name="";
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClassObject1 other = (ClassObject1) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String getName() {
return this.name;
}
}
public class ClassObject2 implements I_Class{
private String name="";
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClassObject2 other = (ClassObject2) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String getName() {
return this.name;
}
}
我假设在这种情况下
I_Class obj1 = new ClassObject1();
I_Class obj2 = new ClassObject2();
System.out.println(obj1 == obj2); // I assume here will write true
“==”比较内存地址,不是吗?
答案 0 :(得分:2)
obj1.hashCode() == obj2.hashCode()
并不代表obj1 == obj2
。两个对象可以具有相同的hashCodes
,没有问题。但最终这些是两个不同的对象,它们不能被判断为相同。
从技术上讲,在Java中,您不应该假设对象的任何低级细节。您无法知道对象的确切内存地址。这就是它在Java中的表现。它与C
中的内容不同。
答案 1 :(得分:1)
不,它会打印false
。 ==
运算符检查两个引用是否都引用同一个对象。在您的情况下,两者都是两个不同的对象。
答案 2 :(得分:0)
由于obj1
和obj2
具有不同的地址,因此会打印错误。
答案 3 :(得分:0)
我没有仔细研究过代码,而是
System.out.println(obj1 == obj2); // I assume here will write true
使用
System.out.println(obj1.equals(obj2));
正如你在OP中所说,我认为==比较内存地址,而.equals()将使用你写的equals方法。
祝你好运!