Это происходит потому, что вы используете условный оператор ?
. Линия
return item == null ? 1 : item.getId();
эквивалентно
int result = item == null ? 1 : item.getId();
return result;
Результат int из-за первого операнда в вашем выражении. Это причина того, что ваш код работает, когда вы явно заключаете 1 в Integer. В этом случае компилятор создает что-то вроде
Integer result = item == null ? new Integer(1) : item.getId();
return result;
Итак, NPE происходит при попытке "привести" item.getId () (который имеет значение null) к int.