【问题标题】:How to reassign iterated reference in for loop? [duplicate]如何在for循环中重新分配迭代引用? [复制]
【发布时间】:2017-04-18 21:45:21
【问题描述】:

在下面的代码中,我预计当我们遍历 5 个数组引用时,我们可以在循环中重新分配这些引用,因此最后应该有 5 个非空引用。

int[][] scores = new int[5][];
for (int[] sr : scores){
    System.out.println(sr); // 5 null entries are printed out as expected
}

for (int[] sr : scores){
    sr = new int[2]; // the 5 null references are assigned to a new array
}

for (int[] sr : scores){
    System.out.println(sr); // 5 null entries are still printed out... 
}

【问题讨论】:

  • sr 是一个临时变量,您不能使用它进行更新!
  • 我看到所以 sr 是参考的副本,而不是实际的参考。因此重定向副本不会影响原始数组。

标签: java for-loop reference iterator


【解决方案1】:

增强型 for 循环中的 sr 变量引用原始 scores 数组的元素,但为其赋值不会修改原始数组的元素。

您在第二个循环中所做的类似于:

for (int i = 0; i < scores.length; i++) {
    int[] sr = scores[i];
    sr = new int[2];
}

这显然不会修改原始数组。

使用常规的 for 循环:

for (int i = 0; i < scores.length; i++) {
    scores[i] = new int[2];
}

【讨论】:

    【解决方案2】:

    您实际上并未将对象分配给scores 数组,而是您在for 循环内创建了一个块变量,变量sr 的范围与for 一起结束循环,所以你的代码应该如下:

    for (int i=0;i<scores.length;i++){
        scores[i] = new int[2];//get the index and assign to scores array
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多