Ответ 1
Значение -1>>>1 == 2147483647
- это максимальное значение int
, которое вы можете иметь в Java.
Иными словами, -1>>>1 == Integer.MAX_VALUE
. Когда вы делаете математику со значениями, близкими к таким ограничениям, вы увеличиваете свои шансы на получение неожиданных результатов. Например, int a = (-1>>>1); System.out.println(a < a + 1);
выводит false
из-за переполнения целых чисел, хотя можно ожидать, что этот код всегда будет печатать true
, поскольку в чистых математических выражениях для любого целого числа n
верно, что n < n + 1
.
Автор этой части кода просто объясняет свое (мудрое) решение написать
if (offset > value.length - count)
вместо аналогичного вида, но не эквивалентного
if (offset + count > value.length)
Эта последняя версия может вызвать переполнение целых чисел, что может стать большой проблемой для следующего кода. Он предупреждает о том, что существует вероятность того, что по крайней мере одно из offset
или count
может быть значением, близким к Integer.MAX_VALUE
, что увеличивает вероятность переполнения.
В первой версии (той, которая используется в исходном коде для String, о которой вы упоминаете), никогда не может быть переполнения: вы точно знаете, что оба offset
и count
являются положительными или 0 из-за предыдущих проверок, и value.length
также положителен или 0, потому что длина массива всегда положительна или 0 в Java, поэтому проблемы с переполнением не могут произойти!
В дополнение к документированию выбора автор предупреждает других разработчиков (в том числе о его будущей "я" ), что существует очень конкретная причина для того, чтобы эта строка была написана так, как она есть, чтобы избежать того, кто соблазн заменить ее на возможно, более естественным образом), во-вторых, неправильная версия от введения ошибки.