Это кажется странным поведением, но я думаю, что это правильно. Все целые числа событий объектов передаются по ссылке. Вызов foo (value) передает значение в функцию. Переменная 'n' является ссылкой на тот же объект, что и ссылки 'value'. По сути, у вас есть два указателя на один и тот же объект. Когда вы увеличиваете 'n', вы увеличиваете только эту переменную.
Так как класс Integer неизменен, ++ на самом деле делает что-то вроде:
n = n + 1
Это присвоение увеличенного значения переменной n. Переменная 'value', объявленная сверху, все еще указывает на исходный объект 5.