这是一个相当基本的java问题
我有一个包含String的数组,我希望使用java.util.Arrays.sort
进行排序当我写
String[] myArray = {"A","B","C"};
java.util.Arrays.sort(myArray);
它正确排序
然而,当我有
String[] myArray = new String[10];
myArray[0] = "A";
myArray[1] = "B";
myArray[2] = "C";
java.util.Arrays.sort(myArray);
sort抛出一个nullreferenceexception
我很确定它的东西真的很愚蠢,我现在不知道。我必须新建String,因为硬编码默认值在任何地方都不会得到任何人。
答案 0 :(得分:7)
初始化第二个数组时,只初始化前三个元素。其他元素初始化为null,因此无法排序。
答案 1 :(得分:3)
在源代码中,该方法使用compareTo()作为排序条件。显然,在 null 上调用compareTo()会引发NullPointerException。正如它在Java Docs中提到的那样,
数组中的所有元素必须是 相互比较(即, e1.compareTo(e2)一定不能扔掉 任何元素的ClassCastException 数组中的e1和e2)
当然这里不是关于ClassCastException,而是调用comapreTo()是显而易见的。
<强> [编辑] 强>
P.S。从异常堆栈跟踪中找出这个是最好的选择。
答案 2 :(得分:3)
尝试以下方法只对前三个元素进行排序。
Arrays.sort(myArray, 0, 3);
答案 3 :(得分:1)
当您拥有包含10个项目的数组时,其他项目未初始化。因此,当排序算法工作时,它会尝试获取字符串的值,但不会获取任何内容,并抛出异常。
您需要确保不要尝试对数组进行排序,这些数组的空间大于放入的数组。
答案 4 :(得分:1)
我认为既然你让myArray
存储了10个元素,那么(有效地)将7个空值添加到结尾,然后Arrays.sort()
不能对字符串排序null元素。
答案 5 :(得分:1)
它无法处理最初创建数组时存在的空字符串。 要避免明确地将all全部设为“”,要么尽可能多地分配。
虽然不知道这是否是API级别的错过,因为他们可以满足空对象(我们通过SQL orderby获取的方式),或者还有更多内容。
答案 6 :(得分:0)
您将数组大小定义为10但仅初始化3个索引。将数组大小更改为3或初始化所有十个。
答案 7 :(得分:0)
数组有10个项目,但你只放3个。所以,其他7都是NULL。请考虑使用ArrayList。
答案 8 :(得分:-1)
应该使用数组列表,因为有3个元素不是10。
数组的其他7个元素将具有空值。
这些空值会在排序时导致Null Pointer问题。