首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Enhanced For Loop -编辑原始数组值

Java Enhanced For Loop -编辑原始数组值
EN

Stack Overflow用户
提问于 2013-01-03 18:41:19
回答 5查看 3.4K关注 0票数 5

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

给定以下代码:

代码语言:javascript
复制
String[] a = {"dog", "cat", "turtle"};

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

它实际上不会修改原始列表'a‘。为什么不行?内存管理是如何工作的?“%s”不是引用了“ai”的同一存储单元吗?

我在oracle文档中读到,增强的for循环不能用于从原始数组中删除元素,它是有意义的。修改值也一样吗?

提前感谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-03 18:43:09

“%s”不是对“ai”的相同内存单元的引用吗?

最初是这样的。但是,in.readLine会生成一个对新String对象的引用,然后您可以使用该对象来覆盖s。但是只有s会被覆盖,不会覆盖底层字符串,也不会覆盖数组中的引用。

票数 11
EN

Stack Overflow用户

发布于 2013-01-03 18:43:49

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

票数 5
EN

Stack Overflow用户

发布于 2013-01-03 18:50:45

你只能写

代码语言:javascript
复制
for (int i = 0; i < a.length; i++) {
  out.println("String: " + a[i]);
  a[i] = in.readLine("New String? ");
}

您不能使用for-each循环来修改原始集合或数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14137219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档