2

私はHashtable自分のJavaプログラムで作業しています。の異常な動作を見て驚いたHastable。以下は私のコードです(これは私の最終的なコードではありません。異常に実行されているコードで新しい単純なプロジェクトを作成しただけです)

    Hashtable<char[], char[]> h1 = new Hashtable<char[], char[]>();
    char[] key = Integer.toString(12).toCharArray();
    char[] val = Integer.toString(21).toCharArray();
    h1.put(key, val);
    System.out.println(h1.containsKey(Integer.toString(12).toCharArray()));// Should print true, since 12 is there in Hashtable
4

3 に答える 3

8

このような配列をマップ キーとして使用することはできません。これは、配列には および のデフォルトの参照等価ベースのObject実装があるためです。代わりにキーとして使用すると、プログラムが希望どおりに機能します。equalshashCodeString

于 2012-04-14T21:26:56.407 に答える
4

配列の等価性は、深い等価性 (「これらの 2 つのオブジェクトは意味的に同一か?」) ではなく、参照の等価性 (「これら 2 つの参照は同じオブジェクトを参照していますか?」) に基づいています。見て:

char[] one = Integer.toString(12).toCharArray();
char[] two = Integer.toString(12).toCharArray();
System.out.println(one == two); // false

http://ideone.com/YwEjV

于 2012-04-14T21:26:31.223 に答える