如何获取重写hashCode()的对象的唯一ID?

当Java中的类不覆盖hashCode()时 ,打印此类的实例将提供一个很好的唯一编号。

Object的Javadoc说关于hashCode()

尽可能合理实际,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。

但是当类重写hashCode()时 ,我怎样才能得到它的唯一编号?


System.identityHashCode(yourObject)将把yourObject的'original'哈希码作为整数。 唯一性不一定得到保证。 Sun JVM实现将为您提供一个与此对象的原始内存地址相关的值,但这是一个实现细节,您不应该依赖它。

编辑:回答下面汤姆的评论修改修改。 内存地址和移动对象。


Object的javadoc指定

这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。

如果一个类重写hashCode,这意味着它想要生成一个特定的id,这将会(可以希望)具有正确的行为。

你可以使用System.identityHashCode来获取任何类的id。


也许这个快速,肮脏的解决方案可以工

public class A {
    static int UNIQUE_ID = 0;
    int uid = ++UNIQUE_ID;

    public int hashCode() {
        return uid;
    }
}

这也给出了正在初始化的类的实例的数量。

链接地址: http://www.djcxy.com/p/71623.html

上一篇: How to get the unique ID of an object which overrides hashCode()?

下一篇: How to ensure hashCode() is consistent with equals()?