Возможно, автор пытается согласиться с советом Дейкстры сделать все диапазоны полуоткрытыми - начальная точка является включающей, а конечная точка - исключительной.
Семантической нетздесь есть разница, но небольшая разница в байт-коде: (ch + 1)
- это int
, поэтому первый фрагмент кода выполняет сравнение char
до char
, за которым следует сравнение int
до int
, а второе - два char
char
сравнений.Это не приводит к семантическому различию - неявное приведение к более широким типам, и поэтому нет риска переполнения в любом фрагменте кода.
Оптимизация добавления и преобразование int
в int
сравнение обратно в 2-байтовое беззнаковое int
сравнение вполне вписывается в рамки видов оптимизации, выполняемой JIT, поэтому я не вижу какой-либо конкретной причины производительности, чтобы отдавать предпочтение одной над другой.
Я склоненнаписать такую вещь как
MIN_LOW_SURROGATE <= ch && ch <= MAX_LOW_SURROGATE
таким образом, ch
в середине делает очевидным для читателя, что ch
тестируется в диапазоне внешних значений.