我有一个在Android可穿戴设备上运行的类,并且应该只有它的一个实例,但是我偶尔会观察到一些意想不到的行为,这导致我推测在某些情况下是否有两个实例正在创建。
如果我在C或C ++世界中,我只需要在类的方法中添加日志记录语句来记录对象的内存地址,并且可以直接检查实际上是否有两个对象或只有一个。
能够识别特定对象实例的Java / Android等效方法是什么?
答案 0 :(得分:2)
toString()
的默认实现应该可以解决问题。根据{{3}},它返回getClass().getName() + '@' + Integer.toHexString(hashCode())
,hashCode()
对于实例应该是唯一的,除非以不这样做的方式覆盖。根据{{3}},似乎hashCode()
的默认实现使用对象的内存地址,提供的功能类似于您在C或C ++中提到的功能。
如果已覆盖hashCode()
,则可以使用System.identityHashCode(Object)
返回唯一哈希码,无论是否已覆盖hashCode()
。更多信息java docs。
答案 1 :(得分:0)
您可以使用System.identityHashCode(obj);
请参阅:http://developer.android.com/reference/java/lang/System.html#identityHashCode(java.lang.Object)
答案 2 :(得分:0)
你可以在像here这样的java中使用工厂,这是一个类似的问题,并且回答正确。希望它有用。