繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM