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

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

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

当您{'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());

在我的机器上,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 回答