2012-01-13 77 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(); 
    } 
} 

好吧,我想添加2個BigDecimal值。我用雙打構造函數(因爲我認爲這是可能的 - 文檔中有一個選項)。如果我在主類使用它,我得到這個:加2 BigDecimal值

x: 1 
y: 1 

當我是System.out.print使用,以顯示我的變量z我得到這個:

z: 5 

回答

56

BigDecimal爲不可變的。每個操作返回一個包含操作結果的新實例:

BigDecimal sum = x.add(y); 

如果你想要使用X改變,你因此所要做的

x = x.add(y); 

閱讀the javadoc確實有助於理解如何在類及其方法工作。

5

也許這就是你喜歡什麼:

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

BigDecimal每個操作返回一個新的BigDecimal,但不會改變當前實例。