this.number
В большинстве случаев они будут оптимизированы под один и тот же код, но смысл использования сеттеров / геттеров состоит в том, чтобы избежать изменения API в случае изменения реализации. Однако в классе вы не используете «API», а видите все внутренности и состояние.
Дополнительно вы можете использовать
numer += 5;
вместо
setNumber(getNumber() + 5);
Редактировать : Конечно, вне класса он должен быть защищен геттером / установщиком, так как вы можете изменить внутреннее представление и обеспечить обратную совместимость, переопределив их в терминах представления нового состояния.
Edit 2 : main
немного особенный. Я бы сказал, что main
должен быть минимально возможным - создать несколько объектов и вызвать максимум один или два метода - следовательно, он не должен присваивать переменные и должен рассматриваться как «внешняя» часть. С другой стороны, некоторые предоставляют методы тестирования в main
, которые могут требовать прямого доступа к состоянию. Поэтому, если вы можете, вы не должны напрямую обращаться к полям в main
.
Что касается скорости в main
, то в любом случае это не имеет значения, поскольку запуск JVM компенсирует любые затраты. Реальная разница будет во внутренних циклах, в которых JIT позаботится об этом.