【发布时间】:2012-12-12 13:11:48
【问题描述】:
有时 printf("%p", this) 有助于查看不同的实例。
在android中相当于什么?
(将this 变量的地址或唯一的东西(它可能不是address)打印到实例)
看来我可以像OnTouchListener 这样的new 接口那么,我如何打印一些东西来区分它们的不同实例?
【问题讨论】:
有时 printf("%p", this) 有助于查看不同的实例。
在android中相当于什么?
(将this 变量的地址或唯一的东西(它可能不是address)打印到实例)
看来我可以像OnTouchListener 这样的new 接口那么,我如何打印一些东西来区分它们的不同实例?
【问题讨论】:
要获得与实例不同的内容,您应该使用System.identityHashCode(this)。它返回Object 中.hashCode() 的默认实现返回的内容(可能已在子类中被覆盖,所以这就是为什么你不应该直接使用.hashCode()),根据文档,它是“尽可能对于不同的对象来说是相当实用的”。
【讨论】:
应该这样做:
android.util.Log.i("Instance", "This is: " + this);
默认情况下,Object 的 toString 实现将打印类类型加上一个哈希码,这在某种程度上等同于 C++ 中的 this 指针。
Object类的toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符'@'和哈希码的无符号十六进制表示形式组成。物体。换句话说,这个方法返回一个字符串等于:getClass().getName() + '@' + Integer.toHexString(hashCode())
如果一个对象提供了不同的toString() 实现,例如String,那么您可以使用上述基本toString() 方法的规范实现来获得相同的结果。
【讨论】:
hashCode() 可能会被覆盖,所以它可能不是不同的
hashCode() 即使没有被覆盖,也可能不明显,但关于System.identityHashCode(this)