У вас в профиле ваше мнение в последнее время.
Производительность:
Возможно, это была микрооптимизация, о которой нужно было позаботиться в 1999-2001 годах в JVM до 1.2, и даже тогда я бы поставил под сомнение это, если бы некоторые серьезные цифры не показали иное.
Современные реализации JIT скажут вам, что сегодня ваше мнение неуместно.
Современные реализации компилятора делают все виды оптимизаций, которые делают мысли о таких вещах пустой тратой времени в Java. JIT просто делает его еще более бесполезной тратой.
Логика:
В параллельной ситуации два ваших кодовых блока не являются логически эквивалентными. Если вы хотите увидеть изменения, создание локальной копии предотвратит это. В зависимости от того, что вы хотите сделать, один или другой подход может создать очень тонкие недетерминированные ошибки, которые будет очень трудно определить в более сложном коде.
Особенно, если то, что было возвращено, было изменчивым, в отличие от String
, который является неизменным. Тогда даже локальная копия могла бы измениться, если вы не сделали глубокое клонирование, и очень легко очень быстро ошибиться.
Заботьтесь о себе , сделав это правильно , затем измерьте и затем оптимизируйте то, что важно , если это не делает код менее обслуживаемым.
JVM встроит любые вызовы final
членов экземпляра и удалит вызов метода, если в вызове метода нет ничего, кроме return this.name;
Он знает, что в методе метода доступа нет логики, и он знает ссылку final
, поэтому он знает, что может встроить значение, потому что оно не изменится.
С этой целью
person.getName() != null && person.getName().equalsIgnoreCase("Einstein")
более корректно выражается как
person != null && "Einstein".equalsIgnoreCase(person.getName())
потому что нет шансов получить NullPointerException
Рефакторинг:
Современные инструменты рефакторинга IDE также устраняют любые аргументы о необходимости изменения кода в нескольких местах.