[英]Java Enhanced For Loop - Editing Original Array Values
我想详细了解Enhanced For Loop在Java中的工作方式(假设我确实了解了此循环的基本用法以及它的一般工作方式)。
给出以下代码:
String[] a = {"dog", "cat", "turtle"};
for (String s : a) {
out.println("String: " + s);
s = in.readLine("New String? ");
}
它实际上并没有修改原始列表“ a”。 为什么不? 内存管理如何工作? “ s”不是对“ a [i]”的相同存储单元的引用吗?
我在oracle文档中读到,增强的for循环不能用于从原始数组中删除元素,这很有意义。 修改值是否一样?
提前致谢
“ s”不是对“ a [i]”的相同存储单元的引用吗?
原来是。 但是随后in.readLine
生成对新String对象的引用,然后可以使用该对象覆盖s
。 但是只覆盖s
,而不覆盖基础字符串或数组中的引用。
s
是一个局部变量,它指向String
实例。 它与a[i]
没有关联,它们刚好刚好具有相同的值。
你只能写
for (int i = 0; i < a.length; i++) {
out.println("String: " + a[i]);
a[i] = in.readLine("New String? ");
}
您不能使用for-each循环来修改原始集合或数组。
想想s
像一个地址的对象。 这里的问题是,使用for循环时, s
指向数组的某个值。 当你reassing s
内环路只是发生s
点到另一个价值,但该阵列的原始值不会被修改为只更改地址 s
指向。
String[] a = {"dog", "cat", "turtle"};
for (String s : a) {
//s --> "dog"
out.println("String: " + s);
s = in.readLine("New String? ");
//s --> the new string the user inputs
}
对于每次迭代,String最初都引用String a []中的相应String对象。 但是它随后被in.readLine()返回的另一个String对象引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.