JavaDoc в Arrays.binarySearch(...)
утверждает, что массив уже должен быть отсортирован, и, таким образом, компаратор фактически сравнивает значение массива и строку поиска, и не не используется для повторной сортировки массива.
Это означает, что вы получите что-то вроде compare(arr[x], "12")
, и ваше условие if гласит, что обе строки должны содержать запятую, в противном случае они равны.И "12"
не содержит запятых, поэтому "12"
равен каждому элементу в массиве (всегда возвращает 0).
Edit :
Глядя на исходный код, кажется, поддерживает мое предположение.Вот такая строка, например:
//c is the Comparator
//midVal is an element of your array
//key is the key parameter you passed to binarySearch(...)
c.compare(midVal, key);
Причиной возврата 49999 является то, что первое значение mid
имеет индекс mid = (low + high) >> 1
, равный (0 + 99999) >> 1 == 49999
, а компаратор возвращает 0, значения равнысчитается равным.И бум, значение "найдено".