使用Character vs char数组初始化

时间:2013-04-09 17:54:20

标签: java autoboxing

这会打印 false

List vowelsList=Arrays.asList(new char[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//false

这会打印 true

List vowelsList=Arrays.asList(new Character[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//true

char被自动添加到我在char数组initailizer中使用的Character。为什么我会得到不同的结果!

2 个答案:

答案 0 :(得分:7)

同时打印

vowelsList.size();

对于两者,你会看到差异;)

<强>扰流:

第一种方法的泛型类型是char[],因此您将获得一个大小为1的列表。它的类型是List<char[]>。第二个代码的泛型类型为Character,因此您的列表将包含与数组一样多的条目。类型为List<Character>


为避免这种错误,请勿使用原始类型!以下代码将无法编译

List<Character> vowelsList = Arrays.asList(new char[]{'a','e','i','o','u'});

以下三行很好:

List<char[]> list1 = Arrays.asList(new char[]{'a','e','i','o','u'}); // size 1
List<Character> list2 = Arrays.asList(new Character[]{'a','e','i','o','u'}); // size 5
List<Character> list3 = Arrays.asList('a','e','i','o','u'); // size 5

答案 1 :(得分:1)

正如@jlordo(+1)所说,你的错误在于理解你的清单包含什么。在第一种情况下,它包含一个char[]类型的元素,因此它不包含char元素a。在第二种情况下,它包含5个Character元素'a','e','i','o','u',因此结果为true