如何在数组内的每个对象上调用方法?

时间:2016-09-24 22:11:48

标签: java arrays

Gist of my full code, 31 lines

我试图转换双打 - > BigDecimal然后在存储在数组内的每个BigDecimal对象上调用setScale方法。

    // convert double variables to BigDecimal inside of new BigDecimal array
    BigDecimal[] ret = new BigDecimal[]{
        new BigDecimal(area),
        new BigDecimal(theta),
        new BigDecimal(x),
        new BigDecimal(y)
    };
    // setScale on each object
    for (BigDecimal val: ret) {
        val.setScale(2, RoundingMode.FLOOR);
    }

但是当我打印出来时,很清楚,当我稍后打印出来时,没有在任何对象上调用setScale函数。

数组中的对象是否未在第二个for循环中被突变或保存?

更新&使用答案建议进行调整:

根据Hovercraft的回答,我在这里重写了我的代码的最后一部分:

    double[] vals = new double[]{area, theta, x, y};
    BigDecimal[] ret = new BigDecimal[vals.length];
    for (int i = 0; i < vals.length; i++) {
        ret[i] = new BigDecimal(vals[i]).setScale(2, RoundingMode.FLOOR);
    }

这正是我想要的。

1 个答案:

答案 0 :(得分:2)

像String这样的BigDecimal是不可变的,因此只需在BigDecimal 对象上调用setScale(...) 就不会对同一个对象产生任何影响。对于要设置的比例,您必须将结果重新分配给BigDecimal变量。为此,我不会使用for-each循环,而是使用for循环:

for (int i = 0; i < ret.length; i++) {
   ret[i] = ret[i].setScale(2, RoundingMode.FLOOR);
}