Arrays.binarySearch在不同类型的对象数组中抛出异常?

时间:2013-05-30 19:53:24

标签: java arrays binary-search

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

2 个答案:

答案 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相当。