Подтвердить что ты не робот

Добавление 2 значений BigDecimal

class Point {

  BigDecimal x;
  BigDecimal y;

  Point(double px, double py) {
    x = new BigDecimal(px);
    y = new BigDecimal(py);
  }

  void addFiveToCoordinate(String what) {
    if (what.equals("x")) {
      BigDecimal z = new BigDecimal(5);
      x.add(z);
    }
  }

  void show() {
    System.out.print("\nx: " + getX() + "\ny: " + getY());
  }

  public BigDecimal getX() {
    return x;
  }

  public BigDecimal getY() {
    return y;
  }

  public static void main(String[] args) {
    Point p = new Point(1.0, 1.0);
    p.addFiveToCoordinate("x");
    p.show();
  }
}

Хорошо, я хотел бы добавить 2 значения BigDecimal. Я использую конструктор с двойниками (потому что я думаю, что это возможно - есть опция в документации). Если я использую это в основном классе, я получаю это:

x: 1
y: 1

Когда я использую System.out.print, чтобы показать мою переменную z, я получаю это:

z: 5
4b9b3361

Ответ 1

BigDecimal является неизменным. Каждая операция возвращает новый экземпляр, содержащий результат операции:

 BigDecimal sum = x.add(y);

Если вы хотите, чтобы x изменился, вы должны сделать

x = x.add(y);

Чтение javadoc действительно помогает понять, как работает класс и его методы.

Ответ 2

Возможно, это то, что вы предпочитаете:

BigDecimal z = new BigDecimal(5).add(x);

Каждая операция BigDecimal возвращает новый BigDecimal, но не меняет текущий экземпляр.