2012-01-13 19 views
24
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, vorrei aggiungere 2 valori BigDecimal. Sto usando il costruttore con il doppio (perché penso che sia possibile - c'è un'opzione nella documentazione). Se lo uso in classe principale, ottengo questo:aggiunta 2 valori BigDecimal

x: 1 
y: 1 

Quando uso System.out.print di mostrare la mia variabile z ottengo questo:

z: 5 

risposta

56

BigDecimal è immutabile. Ogni operazione restituisce una nuova istanza contenente il risultato dell'operazione:

BigDecimal sum = x.add(y); 

Se si vuole x per cambiare, si deve quindi fare

x = x.add(y); 

lettura the javadoc aiuta davvero a capire come una classe e dei suoi metodi lavoro.

5

Forse questo è quello che preferite:

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

Ogni operazione di BigDecimal restituisce un nuovo BigDecimal ma non cambia l'istanza corrente.