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();
}
}
Ok, je voudrais ajouter 2 valeurs BigDecimal. J'utilise un constructeur avec des doubles (car je pense que c'est possible - il y a une option dans la documentation). Si je l'utilise en classe principale, j'obtiens ceci:
x: 1
y: 1
Lorsque j'utilise System.out.print pour afficher ma variable z, j'obtiens ceci:
z: 5
BigDecimal est immuable. Chaque opération renvoie une nouvelle instance contenant le résultat de l'opération:
BigDecimal sum = x.add(y);
Si vous voulez que x change, vous devez donc faire
x = x.add(y);
Lire le javadoc aide vraiment à comprendre comment une classe et ses méthodes fonctionnent.
C'est peut-être ce que vous préférez:
BigDecimal z = new BigDecimal(5).add(x);
Chaque opération de BigDecimal
renvoie un nouveau BigDecimal
mais ne modifie pas l'instance actuelle.