Ответ 1
Это не более эффективно в Java. Он может быть более эффективным на языках, где операторы increment/decment могут быть перегружены, но в остальном производительность точно такая же.
Разница между x++
и ++x
заключается в том, что x++
возвращает значение x
до того, как оно было увеличено, а ++x
возвращает значение x
после того, как оно было увеличено. С точки зрения генерации кода оба составляют то же самое количество инструкций, по крайней мере, когда вы можете использовать либо взаимозаменяемые (если вы не можете использовать их взаимозаменяемо, вы не должны беспокоиться о том, какой из них быстрее, вы должны быть выбрав тот, который вам нужен). Единственное различие заключается в том, где указана инструкция инкремента.
В С++ классы могут перегружать как префикс (++x
), так и postfix (x++
). При работе с типами, которые перегружают их, почти всегда быстрее использовать префиксный оператор, потому что семантика постфиксного оператора вернет копию объекта, как это было до приращения, даже если вы не использовали его, тогда как префикс-оператор может просто вернуть ссылку на измененный объект (и Бог знает, что разработчики на С++ предпочитают возвращать ссылки, а не копии). Это может послужить основанием для рассмотрения ++x
, превосходящего x++
: если вы привыкли использовать ++x
, вы могли бы сэкономить некоторые незначительные проблемы с производительностью, когда/если вы переключитесь на С++. Но в контексте только Java, оба абсолютно эквивалентны.
Как и pst в комментариях выше, я никогда не использую возвращаемое значение x++
или ++x
, и если вы этого не сделаете, вы, вероятно, должны просто придерживаться того, который вы предпочитаете.