@DonDroid

Нужно ли переинициализировать переменные Java состоящие из других переменных?

Добрый вечер.
Заметил следующий нюанс при работе с переменными в Java,
характерно для любых типов переменных int, String и т.д., не
зависит от модификатора - переменная static или не статическая:

public class Test {

    static int var1 = 5;
    static int var2 = 5;
    static int var3 = 5;
    static int varSum = var1 + var2 + var3;

    public static void main(String[] args) {
        System.out.println(varSum);
        var1 = 50;
        System.out.println(varSum);
    }
}


Результат исполнения будет:
15
15
Хотя, казалось бы, что должно быть:
15
60

Вопросы следующие:
1. Получается переменную, состоящую из других переменных нужно
переинициализировать каждый раз после изменения одной из её
составляющих? В данном случае после присвоения var1 = 50; нужно
будет вставить varSum = var1 + var2 + var3; тогда результат будет
15 и 60.
2. Может быть, есть какой-то метод заставляющий переменную varSum
пересчитать себя без переинициализации? Например:
varSum.something() или something(varSum) или ещё как-то?
  • Вопрос задан
  • 233 просмотра
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Переменная не состоит из других переменных. Она состоит из значения и никак не связана с другими переменными.
После:
int varSum = var1 + var2 + var3;
в варСум будет сумма ЗНАЧЕНИЙ переменных var1-var3 и никакой связи с ними не будет.
Ответ написан
static int varSum = var1 + var2 + var3;
здесь varSum объявлена и инициализированна, т.е. здесь она уже 15.
System.out.println(varSum);
здесь вы просто выводите ее значение в консоль.

В данном случае после присвоения var1 = 50; нужно
будет вставить varSum = var1 + var2 + var3; тогда результат будет
15 и 60.
да. вы заново вычислите значение varSum.

Может быть, есть какой-то метод заставляющий переменную varSum
пересчитать себя без переинициализации?
Это будет уже не инициализация.

Но нечто похожее можно реализовать с помощью например javafx Property
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы