Два объекта обновляют друг друга как-то - java


0

У меня есть объект с именем SavingAccount, когда я создаю два объекта этого типа на моем основном, я могу установить начальный баланс аккаунта пользователя. Когда я создаю свой первый объект, устанавливается начальное значение 3000, когда я создаю второй объект с начальным значением 2000, которое устанавливается как для моего первого, так и для второго объекта.

Сначала я подумал, что это связано с общедоступными методами и классами, но я установил их все как частные, защищенные и т.д., И проблема все еще сохраняется.

это мой объект:

public class SavingsAccount {
private static double annualInterestRate = 0;
private static double savingsBalance = 0;
private static double monthlyInterest = 0;


SavingsAccount(double savingsBalance){
    this.savingsBalance = savingsBalance;
}

void setAnnualInterestRate(double annualInterestRate){
    this.annualInterestRate = annualInterestRate;

}


private static void updateSavingsBalance(){
    savingsBalance = savingsBalance + monthlyInterest;
}

double getSavingsBalance(){
    return savingsBalance;
}

}

это мой водитель:

    SavingsAccount saver1 = new SavingsAccount(3000.00);
    System.out.println("User 1 balance: " + saver1.getSavingsBalance()); // 3000

    SavingsAccount saver2 = new SavingsAccount(2000.00);
    System.out.println("User 2 balance: " + saver2.getSavingsBalance()); // 2000

    //2000 for both now
    System.out.println("User 1 balance: " + saver1.getSavingsBalance());
    System.out.println("User 2 balance: " + saver2.getSavingsBalance());
  •  47
  •  1
  • 11 май 2020 2020-05-11 10:17:28

1 ответ

1

Проблема в том, что вы используете переменные static, а не нестатические (экземплярные) переменные.

Существует только одно воплощение каждой статической переменной - поэтому в вашем случае, независимо от того, сколько объектов SavingsAccount вы создаете, все они совместно используют одни и те же данные savingsBalance. Таким образом, когда вы (кажется, что) изменили один из SavingAccount savingsBalance, вы меняете его для всех