[关闭]
@Fancy-Bai 2015-01-13T09:40:34.000000Z 字数 554 阅读 1802

如何区分同一Class的不同实例对象

Java


今天在一个Java群里有一个群友问了一个问题:

  1. public class AClass {
  2. public static void main(String[] args) {
  3. SubClass s1 = new SubClass();
  4. s1.print();
  5. SubClass s2 = new SubClass();
  6. s2.print();
  7. }
  8. }
  9. class SubClass{
  10. void print(){
  11. System.out.println("s1 or s2 invoke thie method?");
  12. }
  13. }

SubClass实例化了两个对象,分别是s1s2,两个对象都调用了print()方法,在方法中我们如何得知到底是哪个对象调用了这个方法?

有人说使用System.out.println(this.getClass().getName());,这显然是不行的。这样只能得到SubClass这个类型的信息,不管是s1还是s2对象,他们都是属于SubClass类型。

我建议使用System.out.println(this.hashCode());,这样可以得到不同的对象的哈希码。更改print()方法之后,得到结果如下:

  1. 1908246931
  2. 1385385019

这样,不同的对象拥有不同的哈希码,也就拥有了一个唯一标识。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注