Q值。第2行和第2行第4行不要给出异常而第1行,第3行呢?
Object arr[]={1,2,5,"ABC",6};
Arrays.sort(arr);//line 1
Arrays.binarySearch(arr,5);//line 2
Arrays.binarySearch(arr,"ABC");//line 3
Arrays.binarySearch(arr,6);//line 4
答案 0 :(得分:2)
如果binarySearch()
方法实际上试图比较两个无法比较的对象,那么它与此有关。
在第2行和第4行,您很幸运能够找到您要搜索的元素而不会遇到不兼容的对象,并且不会抛出ClassCastException
。
实际上,通过编辑(之前的数组为{1,2,5,"ABC",6}
),第2行是唯一有效的。
答案 1 :(得分:1)
来自Arrays#sort
javadoc(强调我的):
抛出:
IllegalArgumentException - if fromIndex> toIndex或(可选)如果发现数组元素的自然顺序违反了Comparable合同
ArrayIndexOutOfBoundsException - 如果fromIndex< 0或toIndex>则为a.length
ClassCastException - 如果数组包含不可相互比较的元素(例如,字符串和整数)。
来自Arrays#binarySearch
javadoc(强调我的):
抛出
ClassCastException - 如果搜索键与数组的元素不可比较。
请注意,在代码的第1行和第3行中,"ABC"
或"6"
与1,2或5相当。