为什么这是可能的
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'});
答案 0 :(得分:5)
第二个例子的正确语法是:
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
。
答案 1 :(得分:0)
这是可能的 -
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
{'J', 'K', 'L'}
是一个没有类型的匿名数组,会导致语法不匹配。
答案 2 :(得分:0)
{'J',...}不是您声明匿名数组的方式,您必须显式声明数组所包含的类型。
你可能想要 Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
答案 3 :(得分:0)
您必须明确指定操作数的类型:
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char []{'J','K','L'}, new char []{'J','L'});
这将有效。