我想详细了解增强的For循环在Java中是如何工作的(假设我确实了解这个循环的基本用法以及它一般是如何工作的)。
给定以下代码:
String[] a = {"dog", "cat", "turtle"};
for (String s : a) {
out.println("String: " + s);
s = in.readLine("New String? ");
}它实际上不会修改原始列表'a‘。为什么不行?内存管理是如何工作的?“%s”不是引用了“ai”的同一存储单元吗?
我在oracle文档中读到,增强的for循环不能用于从原始数组中删除元素,它是有意义的。修改值也一样吗?
提前感谢
发布于 2013-01-03 18:43:09
“%s”不是对“ai”的相同内存单元的引用吗?
最初是这样的。但是,in.readLine会生成一个对新String对象的引用,然后您可以使用该对象来覆盖s。但是只有s会被覆盖,不会覆盖底层字符串,也不会覆盖数组中的引用。
发布于 2013-01-03 18:43:49
s是一个指向String实例的局部变量。它与a[i]没有关联,只是它们最初恰好具有相同的值。
发布于 2013-01-03 18:50:45
你只能写
for (int i = 0; i < a.length; i++) {
out.println("String: " + a[i]);
a[i] = in.readLine("New String? ");
}您不能使用for-each循环来修改原始集合或数组。
https://stackoverflow.com/questions/14137219
复制相似问题