Фиксить чужой код - достаточно смелая затея. Особенно если нет опыта в программировании.
Насчёт "Сыпятся NPE но всё работает": там или не всё работает, или странно настроены логи. Если исключение отлавливается и обрабатывается штатно - это не уровень ERROR.
Если отлавливаются в try - catch и соответствующе обрабатываются - никак лечить не надо. Хоте генерация исключения - достаточно "дорогая" операция и лучше до неё не доводить, проверять заранее там, где это возможно.
Частности зависят от языка программирования, насколько я помню.
Для Java: при префиксном инкременте (++i) значение переменной i увеличивается на 1 и сразу в выражении учитывается увеличенным, при постфиксном декременте значение переменной также увеличивается сразу, но для вычисления выражения учитывается старое значение. При повторном обращении к той же переменной в том же выражении она в обоих случаях уже будет учитываться увеличенной на 1.
То есть:
i = 1
2 + i++ // результат выражения равен 3, i равно 2
j = 1
2 + ++j // результат выражения равен 4, j равно 2
В С и С++, это работает немного по-другому, подробностей не знаю, но вроде как при множественной инкрементации / декрементации переменной внутри одного выражения при расчётах во всех случаях вместо [i на момент вычисления значения] будет подставлено [i после того, как все операции над ним были совершены].
Или, если не взять денег, на том всё и закончится. Пробовал такой вариант развития событий, хотел попозже, подальше от чужих глаз с этим товарищем поговорить, но его труп просто как-то раз появился недалеко от "Скадовска".
Насчёт "Сыпятся NPE но всё работает": там или не всё работает, или странно настроены логи. Если исключение отлавливается и обрабатывается штатно - это не уровень ERROR.
Для Java: при префиксном инкременте (++i) значение переменной i увеличивается на 1 и сразу в выражении учитывается увеличенным, при постфиксном декременте значение переменной также увеличивается сразу, но для вычисления выражения учитывается старое значение. При повторном обращении к той же переменной в том же выражении она в обоих случаях уже будет учитываться увеличенной на 1.
То есть:
i = 1
2 + i++ // результат выражения равен 3, i равно 2
j = 1
2 + ++j // результат выражения равен 4, j равно 2
В С и С++, это работает немного по-другому, подробностей не знаю, но вроде как при множественной инкрементации / декрементации переменной внутри одного выражения при расчётах во всех случаях вместо [i на момент вычисления значения] будет подставлено [i после того, как все операции над ним были совершены].