java - 为什么我的wrapped int没有保留这个方法所做的更改?

标签 java pass-by-reference

private static String getArgValue(String[] argsString, int[] jIndex, String classTag) {

    String thisToken;

    for( ; jIndex[0]<argsString.length ; jIndex[0]++) {
        System.out.println("jIndex[0]: " + jIndex[0]);

        if (condition) {
            // yadda yadda yadda
            jIndex[0]++;
            System.out.println("jIndex[0]: " + jIndex[0]);
            return retString;
        }
    }

    return retString;
}

我尝试使用Integer 和数组来包装它,但都没有对原始i 变量进行更改。怎么称呼:

int[] j = new int[1];

for(int i=2; i< argsString.length; i++) {
    // yadda yadda yadda
    System.out.println("opening i: " + i);
    j[0] = i;

    thisArgValueString = getArgValue(argsString, j, thisArgClassString);
    System.out.println("closing i: " + i);
}

示例输出:

opening i: 2
jIndex[0]: 2
jIndex[0]: 3
jIndex[0]: 5
closing i: 2

最佳答案

尝试打印你的 int 持有者而不是 i 本身:

System.out.println("closing i: " + j[0]);

或者您可以简单地重新分配 i:

i = j[0];
System.out.println("closing i: " + i);

您的原始变量i不会自行改变,因为它是原始类型。整数也没有用,因为它是不可变的。所以您提供的代码本质上是正确的方法。你只需要明白,j[0] = i仅分配 i 的值至j[0]并且不链接 j[0] 的内容至i 。所以你可以使用j[0]从那时起(就像本文中的第一个代码)或重新分配 ij[0] 返回(就像本文中的第二个代码一样)。

关于java - 为什么我的wrapped int没有保留这个方法所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880015/

相关文章:

更改结构中元素的值

python - 在 Python 中通过引用传递整数

c++ - 使用不同的参数在 C++ 中复制构造函数

java - 在java计算器程序中添加日志功能

java - 堆排序实现bug,与插入函数

Java xml解析解决方案

JAVA:如何在 Netbeans 中使用导入的库

C++ 引用 - SomeType* &val 与 SomeType* val

java - 使用Jsoup登录pastebin

c - 将 C 中的子数组传递给一维数组函数