-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
4

2 回答 2

2

它与该binarySearch()方法是否真的试图比较两个无法比较的对象有关。

在第 2 行和第 4 行,您很幸运地找到了要搜索的元素,而没有遇到不兼容的对象,并且没有ClassCastException抛出 no。

实际上,通过您的编辑({1,2,5,"ABC",6}之前的数组),第 2 行是唯一有效的。

于 2013-05-30T19:57:55.067 回答
1

来自Arrays#sortjavadoc(强调我的):

抛出:

IllegalArgumentException - 如果 fromIndex > toIndex 或(可选)如果发现数组元素的自然顺序违反了 Comparable 协定

ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length

ClassCastException - 如果数组包含不可相互比较的元素(例如,字符串和整数)。

来自Arrays#binarySearchjavadoc(强调我的):

投掷

ClassCastException - 如果搜索键与数组元素不可比较。

请注意,在您的代码的第 1 行和第 3 行中,"ABC"也不能"6"与第 1、2 或 5 行相提并论。

于 2013-05-30T19:56:59.287 回答