2013-12-17 27 views
7

返されたリストが一度作成されたかどうか、またはそれがオブジェクトのコピーであるかどうかを確認する必要があります。それはそれのアドレスを見つけることは可能ですか?リストのアドレスを取得するにはどうすればよいですか?

// thread 1 
List<Object> list = supplier.get(); 
System.out.print("list: " + list + "@" + getAddress(list)); 

// thread 2 
List<Object> list = supplier.get(); 
System.out.print("list: " + list + "@" + getAddress(list)); 

どうすればgetAddress(list)のようにできますか?問題は、通常はアドレスを返すhashCode()AbstractListにオーバーライドされているため、アドレスではなく有効なハッシュコードが返されることです。

+0

私は「どのアドレスですか?」と尋ねるつもりでしたが、それから私はそれを驚かせました。しかし興味深い質問。 – GGrec

答えて

6

そのアドレスはわかりますか?

いいえあなたは、しかし、参照の等価性をチェックすることができます - あなたが気にすべてある:あなたが本当にログからこれをしたい場合は

if (list1 == list2) 
{ 
    // They're the same 
} 

、あなたの代わりにSystem.identityHashCodeを使用することができますが、これはではなく、はアドレスとみなされることを意識しています。それはまだハッシュコードであり、ユニークであることが保証されていません。それはいくつかの内部アドレスに関連かもしれませんが、それはあまりにも保証から遠いです。

8

私はあなたがjavadocが与えられたかどうか、)(デフォルトの方式のhashCodeによって返されるよう

が指定されたオブジェクトに対して同じハッシュコードを返し言う

System.identityHashCode(list); 

をしたいと思いますオブジェクトのクラスはhashCode()をオーバーライドします。

+0

うわー!ありがとう、それは私が必要なものです。もっと正確なので、私はジョンの答えを受け入れるだろう。 –

2

オブジェクトのアドレスはJavaでは固定されていないため移動できますので取得できません。

if(list1 == list2)をチェックしてみませんか?

+0

私が間違って言ったことを教えてください。 – Maroun

+1

今私は何を意味しているのですか?JVMはオブジェクトを移動させて物理アドレスが変わるようにすることができます。 +1 –

関連する問題