当toString()和hashCode()被覆盖时,可以使用System.identityHashCode()方法获取对象的"对象引用"。
System.identityHashCode()方法返回对象的哈希码,这个哈希码是基于对象的内存地址计算出来的,因此它是唯一的,并且不会因为对象的内容发生变化而改变。
例如,可以使用以下代码获取对象的"对象引用":
class MyClass {
private int id;
private String name;
public MyClass(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "MyClass{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
public class Main {
public static void main(String[] args) {
MyClass obj1 = new MyClass(1, "Object 1");
MyClass obj2 = new MyClass(2, "Object 2");
System.out.println("Object 1: " + obj1);
System.out.println("Object 2: " + obj2);
System.out.println("Object 1 hashCode: " + obj1.hashCode());
System.out.println("Object 2 hashCode: " + obj2.hashCode());
System.out.println("Object 1 identityHashCode: " + System.identityHashCode(obj1));
System.out.println("Object 2 identityHashCode: " + System.identityHashCode(obj2));
}
}
输出结果如下:
Object 1: MyClass{id=1, name='Object 1'}
Object 2: MyClass{id=2, name='Object 2'}
Object 1 hashCode: 1137894938
Object 2 hashCode: 1137894940
Object 1 identityHashCode: 1829164700
Object 2 identityHashCode: 1829164701
从输出结果可以看出,即使obj1和obj2的内容相同,但它们的哈希码和"对象引用"都是不同的。因此,可以使用System.identityHashCode()方法获取对象的"对象引用"。
领取专属 10元无门槛券
手把手带您无忧上云