205
|
ivan_ivanovich_ivanoff · 技术社区 · 16 年前 |
![]() |
1
311
System.identityHashCode(yourObject) 将以整数形式给出对象的“原始”哈希代码。独特性并不一定能保证。Sun JVM实现将为您提供一个与此对象的原始内存地址相关的值,但这是一个实现细节,您不应该依赖它。 编辑:回答修改后汤姆的评论如下。内存地址和移动对象。 |
![]() |
2
27
对象的javadoc指定
如果一个类重写了hashcode,这意味着它想要生成一个特定的ID,这将(人们可以希望)具有正确的行为。 你可以使用 System.identityHashCode 任何一个班级都可以拿到这个身份证。 |
![]() |
3
8
也许这个快速,肮脏的解决方案会奏效?
这还提供了正在初始化的类的实例数。 |
![]() |
4
7
如果需要对象的标识符,我建议您添加自己的方法,而不是重写
示例用法:
对于ID生成,您可以检查 my blog post 我试图解释一些生成唯一ID的方法。 |
![]() |
5
3
如果是可以修改的类,则可以声明类变量
|
![]() |
6
1
我提出了这个解决方案,在我的例子中,我在多个线程上创建了对象,这些对象是可序列化的:
|
![]() |
7
0
只是从另一个角度增加其他答案。 如果要重用“above”中的哈希代码,并使用类的“不可变状态”派生新的哈希代码,则对super的调用将起作用。虽然这可能会/可能不会一直层叠到对象(即某些祖先可能不会调用super),但它将允许您通过重用来派生哈希代码。
|
![]() |
8
0
hashcode()和identityhashcode()返回之间存在差异。对于两个不相等(用==)的对象O1,o2 hashcode()可能是相同的。请参阅下面的示例,这是如何实现的。
|
![]() |
9
0
我也有同样的问题,到目前为止我对任何答案都不满意,因为它们都不能保证唯一的ID。 我还想打印对象ID以便进行调试。我知道一定有某种方法可以做到这一点,因为在Eclipse调试器中,它为每个对象指定了唯一的ID。 我基于这样一个事实提出了一个解决方案:对象的“==”运算符只在两个对象实际上是同一个实例时返回true。
我认为这应该确保在程序的整个生命周期内具有唯一的ID。但是请注意,您可能不想在生产应用程序中使用它,因为它维护对您为其生成ID的所有对象的引用。这意味着您为其创建ID的任何对象都不会被垃圾收集。 因为我将它用于调试,所以我不太关心内存是否被释放。 如果需要释放内存,可以修改此选项以允许清除对象或删除单个对象。 |
![]() |
10
0
如果你在调查
|
![]() |
redcodefinal · 用另一个整数哈希一个整数[closed] 10 年前 |