将数组放入Hashmap作为键或使用花括号的值不起作用

gia*_*kis 1 java arrays hashmap char

为什么这是可能的

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

虽然这不是

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

NPE*_*NPE 5

第二个示例的正确语法是:

F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
Run Code Online (Sandbox Code Playgroud)

{'J', 'K', 'L'}初始化程序外部使用时,编译器不会尝试猜测数组的类型.你必须明确说明它.

另请注意,由于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());
Run Code Online (Sandbox Code Playgroud)

在我的机器上,2即使两个键由完全相同的字符组成,也会打印出来.