2010-11-25 11 views
3

インスタンス番号またはIDの取得方法はありますか?つまり、値列のクラス名の後に、[デバッグ]> [変数]ウィンドウに表示される内容が表示されます。インスタンス番号の取得方法

おかげデフォルトで

+0

私はその数がオブジェクトのメモリアドレスであると信じています。 'hashCode'はこの数値を返します。または、その数値を返します。 – cdhowie

+0

可能性があります[JavaオブジェクトIDのjvm]の複製(http://stackoverflow.com/questions/3289550/java-object-id-in-jvm) – nos

+1

私はメモリアドレスを意味しない、私はインスタンスの数を意味しないオブジェクト。数字は日食によって生成される可能性があります。 – liborw

答えて

1

、デバッガは、あなたのオブジェクトのハッシュコードとtoString()方法の結果を示しています。したがって、hashCode()メソッドを実行して値を確認することができます。

5

がオブジェクトに対してオーバーライドされていない場合に返される数値を返すSystem.identityHashCodeを参照してください。複数のオブジェクトが同じアイデンティティハッシュコードを持つ可能性があるため、IDの完全なプロキシではありませんが、デバッグには非常に便利です。

0

私はあなたが()の実装をToStringメソッドオブジェクトへの参照のうえしていると仮定:

return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
0

たぶん私は間違っているんだけど、私は、クラスのインスタンスが番号が付けられているとは思いません。私は何度も特定のクラスのインスタンスを取得するための方法を探してきました。私の検索結果によると、それは不可能です。インスタンスにはアドレスがありますが、クラスインスタンス番号には使用されません(オブジェクトはメモリAFAIKのクラスによってソートされません)。特定のクラスのインスタンスに数値を与えるためのメカニズムをいつでも作成できることに注意してください。クラス内に静的なカウントを持ち、(コンストラクタ内で)作成した新しいインスタンスごとにその値を与え、毎回その値を増やします。これはインスタンスを区別する方法になります。

関連する問題