问:为什么第 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 行和第 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
它与该binarySearch()
方法是否真的试图比较两个无法比较的对象有关。
在第 2 行和第 4 行,您很幸运地找到了要搜索的元素,而没有遇到不兼容的对象,并且没有ClassCastException
抛出 no。
实际上,通过您的编辑({1,2,5,"ABC",6}
之前的数组),第 2 行是唯一有效的。
来自Arrays#sort
javadoc(强调我的):
抛出:
IllegalArgumentException - 如果 fromIndex > toIndex 或(可选)如果发现数组元素的自然顺序违反了 Comparable 协定
ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length
ClassCastException - 如果数组包含不可相互比较的元素(例如,字符串和整数)。
来自Arrays#binarySearch
javadoc(强调我的):
投掷
ClassCastException - 如果搜索键与数组元素不可比较。
请注意,在您的代码的第 1 行和第 3 行中,"ABC"
也不能"6"
与第 1、2 或 5 行相提并论。