Вопрос №664 от пользователя Михаил Соколовский в уроке «Модуль 5. Урок 3. Неизменяемые объекты.», курс «Введение в Java»

Михаил Соколовский

Разве в этом задании существенно наличие атрибута final?

public class Player {
   String lvl = "0";

  public static void main(String[] args) {
    Player p1 = new Player();
    setPl(p1);
    System.out.println(p1.lvl);
  }

  static void setPl(Player p) {
    final Player p1 = new Player();
    p = p1;
    p.lvl = "1";

  }
} 
5 0

Глеб Бочкарёв

final — прежде всего защита от самого себя.

Дело в том, что хорошие компиляторы «умнее» людей. Компилятор может легко пробежаться по коду и выяснить, изменяется ли переменная в методе, и сам применить нужные оптимизации, если считает нужным. Время «подсказок компилятору» на нормальных платформах прошло.

А вот защититься от собственных глупых ошибок — например, чтобы случайно не изменить переменную, которую вовсе не нужно менять — хорошая идея. Если вы случайно измените final-переменную, компилятор немедленно подскажет вам об этом. Поэтому имеет смысл не задумываясь ставить final везде, где переменная не должна меняться, не отвлекаясь на то, как в данный момент реализован метод.

3

Михаил Соколовский

Спасибо за развернутый комментарий!

Может ли переменная с атрибутом final меняться в зависимости от экземпляра (instance) класса, т.е. иметь разные значения для каждого конкретного объекта?

0

Вячеслав Ковалевский

Если поле класса final но не static то значение этого поля может отличатся в каждом экземпляре класса, но в то же время в каждом экземпляре класса оно не может изменятся со временем жизни экземпляра класса.

1

Dmitry Protopopov

Доброго времени суток. В этом тестовом задании поле класса же не имеет атрибута final.

0

Вячеслав Ковалевский

Поле класса - нет (иначе бы код не скомпилировался). Единственное место где используется ключевое слово final это локальная переменная (хотя как уже было замечено это не влияет на вопрос)

1

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 июня 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
1 июня 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
1 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
1 июня 5 месяцев