Все работает нормально. Обратите внимание, что Integer.MAX_VALUE
равно 0x7FFFFFFF
, когда вы добавляете 2000
, оно становится 0x800007CF
, которое по-прежнему находится в пределах 32-битного значения, но переполняется до диапазона отрицательных чисел, когда интерпретируется как 32-разрядное целое число со знаком. Следовательно, a
является отрицательным Int
, а b
является 0
.