Java增强的循环 - 编辑原始数组值

jna*_*llo 5 java for-loop memory-management

我想详细了解Enhanced For Loop如何在Java中工作(假设我确实了解了这个循环的基本用法以及它是如何工作的).

给出以下代码:

String[] a = {"dog", "cat", "turtle"};

for (String s : a) {
  out.println("String: " + s);
  s = in.readLine("New String? ");
}
Run Code Online (Sandbox Code Playgroud)

它实际上并没有修改原始列表'a'.为什么不?内存管理如何工作?这不是'a [i]'的同一个存储单元的引用吗?

我在oracle文档中读到,增强for循环不能用于从原始数组中删除元素,这是有道理的.修改值是否相同?

提前致谢

Oli*_*rth 10

这不是'a [i]'的同一个存储单元的引用吗?

原来,是的.但随后in.readLine会生成对新String对象的引用,然后使用该对象进行覆盖s.但只是s被覆盖,不是底层字符串,也不是数组中的引用.


Hen*_*nry 5

s是指向String实例的局部变量。它与 无关a[i],它们只是刚好最初具有相同的值。