1

これが可能な理由

   Map <char[],char[]>F = new HashMap<char[],char[]>();
   char []R = {'J','K','L'};
   char []X = {'J','L'};
   F.put(R,X);

これはそうではありませんが

   Map <char[],char[]>F = new HashMap<char[],char[]>();
   F.put({'J','K','L'}, {'J','L'});
4

4 に答える 4

6

2 番目の例の正しい構文は次のとおりです。

F.put(new char[]{'J','K','L'}, new char[]{'J','L'});

初期化子の外で使用する{'J', 'K', 'L'}と、コンパイラは配列の型を推測しようとしません。明示的に記載する必要があります。

また、 は 2 つの配列のアドレスarray1.equals(array2)を比較するため、驚くような動作をすることに注意してください。検討:HashMap

    Map<char[], char[]> F = new HashMap<char[], char[]>();
    F.put(new char[] { 'J', 'K', 'L' }, new char[] { 'J', 'L' });
    F.put(new char[] { 'J', 'K', 'L' }, new char[] { 'J', 'L' });
    System.out.println(F.size());

私のマシンでは2、2 つのキーがまったく同じ文字で構成されていても、これは出力されます。

于 2012-12-18T08:26:19.503 に答える
0

これは可能です -

Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});

{'J', 'K', 'L'}構文の不一致を引き起こす型のない無名配列です。

于 2012-12-18T08:26:26.470 に答える
0

{'J', ...} は匿名配列を宣言する方法ではありません。配列が保持する型を明示的に宣言する必要があります。

あなたはおそらく欲しい

    Map <char[],char[]>F = new HashMap<char[],char[]>();
       F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
于 2012-12-18T08:26:33.103 に答える
0

オペランドの型を次のように明示的に指定する必要があります

Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char []{'J','K','L'}, new char []{'J','L'});

これは機能します。

于 2012-12-18T08:27:36.313 に答える