我有一个Java类以下。区分Java对象
public class MyClass {
private final String id;
public MyClass(final String id) {
this.id= id;
}
public String getId() {
return id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final MyClass other = (MyClass) obj;
if (id== null) {
if (other.getId != null)
return false;
} else if (!id.equals(other.getId))
return false;
return true;
}
}
现在我正在创建2个这个类的对象。
MyClass obj1 = new Object("ABCD");
MyClass obj2 = new Object("ABCD");
根据我的类定义,这两个对象是相等的。但在堆中,我相信会创建2个不同的对象。
如果我想证明,虽然两个对象是平等的,但他们仍然不同,我该怎么做?
'不同的对象,所以是有两个相等但分开的objects':除了已汇集机构('String'类,“Ingeter”在-256到255之间......)。但是,是的,我承认这不是问题的重点:D – Dici
@Dici:整数池是从-128到127. –
@Dici'new String()'将创建一个新对象,与Integer相同。只有在字符串被创建为字面值时才会发生池化,或者使用Integer.valueOf()/ Long.valueOf()创建'Integer/Long'自动装箱或创建。 – Kayaman