为什么这是可能的
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'});
第二个示例的正确语法是:
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
即使两个键包含完全相同的字符,它也会打印出来。
这个有可能 -
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
{'J', 'K', 'L'}
是一个没有类型的匿名数组,会导致语法不匹配。
{'J', ...} 不是你声明匿名数组的方式,你必须明确声明你的数组持有的类型。
你可能想要
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
您必须将操作数的类型明确指定为:
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char []{'J','K','L'}, new char []{'J','L'});
这将起作用。