java - 方法意外地改变了我的数组的值

标签 java arrays

计算百分比的方法(来 self 不想更改但确实如此的数组):

private float values[] = { AGREE, DISAGREE };

private float[] calculateData(float[] data) {
    // TODO Auto-generated method stub
    float total = 0;
    for (int i = 0; i < data.length; i++) {
        total += data[i];
    }
    // 180 is the amount of degrees of the circle - setting it up to half
    // circle 360 means full circle
    for (int i = 0; i < data.length; i++) {
        data[i] = 180 * (data[i] / total);
    }

调用方法:

float[] degrees = calculateData(values);

如果我在调用此方法之前记录数组的值,我会得到 1.0,1.0,但在调用方法之后我会得到 90.0,90.0,为什么?如果我不更改values[]

我知道它发生在该方法中,因为当我删除它时,我得到 1.0,1.0 (我真正想要得到的)

编辑:

感谢您的回答,所以如果我理解正确的话:如果方法的参数发生更改,则调用方法时设置为参数的对象也会发生更改。

最佳答案

您正在此处修改数组:data[i] = 180 * (data[i]/Total);

您在函数的参数中获取数组的地址,而不是它的副本,因此如果您在函数中修改它,它将修改您在隔离 calculateData 时传递的数组功能。

关于java - 方法意外地改变了我的数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23271227/

相关文章:

Java:覆盖表格单元格渲染器,但使用默认背景和属性

java - 将 lambda 作为具有泛型类型的参数传递 - java 8

java - 使用java将对象数组复制到另一个数组

javascript - AngularJS中如何拼接变量值?

java - Spring:是否可以在新建应用程序上下文时指定 default-lazy-init 值?

java - 返回 javax.ws.rs.core.Response 的列表,结果为 500

java - antlr4语法编译错误

c - 如何在 C 中定义函数数组

java - 对于写入固定大小数组的不同部分的并行线程,是否存在线程安全的 Java 数据结构?

arrays - 直接访问R中data.frame中的Vector元素?