当前位置: 首页 > 知识库问答 >
问题:

为什么foreach语句不更改元素值?

管翼
2023-03-14

为什么下面的印的是boss而不是BASS?

String boss = "boss";
char[] array = boss.toCharArray();

for(char c : array)
{
 if (c== 'o')
     c = 'a'; 
}
System.out.println(new String(array)); //How come this does NOT print out bass?It prints boss.

共有1个答案

晋骏喆
2023-03-14

您正在更改迭代变量c。这不会更改数组的内容。迭代变量只是数组元素的副本。如果要修改数组,则需要显式地执行此操作:

for (int i = 0; i < array.length; i++) {
    if (array[i] == 'o') {
        array[i] = 'a';
    }
}

您的原始代码相当于(根据JLS第14.14.2节):

for (int i = 0; i < array.length; i++) {
    char c = array[i];
    if (c == 'o') {
        c = 'a'; 
    }
}

改变局部变量的值永远不会改变其他任何东西--它只是改变了局部变量。作业:

char c = array[i];

将数组中的值复制到局部变量中。它不会将局部变量与数组元素永久关联。

 类似资料:
  • 问题内容: 下面的印刷品为什么是老板而不是低音? 问题答案: 你正在更改迭代变量。那不会改变数组的内容。迭代变量只是数组元素的副本。如果要修改数组,则需要显式修改: 你的原始代码等效于(按照JLS的14.14.2节): 更改局部变量的值将永远不会更改任何其他内容,它只会更改局部变量。那作业: 将数组中的值复制到局部变量中。它不会将本地变量与数组元素永久关联。

  • 我正在迭代Java 7循环和Java 8 循环中的列表。Java 8 循环希望其中的变量不会更改。例如: 有人能解释一下为什么吗?是Java 8的弊端吗?

  • 问题内容: 我已经习惯了MSSQL,而不是Mysql,所以对这个可能很愚蠢的问题感到抱歉。我正在尝试通过运行以下查询来更新备份数据库的密码: 当我运行它时,它说 查询正常,受影响的0行(0.01秒)匹配的行:1已更改:0警告:0 为什么行匹配但没有变化? 问题答案: 这意味着该值未更改。由于该列已等于的md5哈希值,因此可能未更改。

  • foreach 循环语句是 Java 1.5 的新特征之一,在遍历数组、集合方面,foreach 为开发者提供了极大的方便。 foreach 循环语句是 for 语句的特殊简化版本,主要用于执行遍历功能的循环。 foreach 循环语句的语法格式如下: 其中, “类型”为集合元素的类型,“变量名”表示集合中的每一个元素,“集合”是被遍历的集合对象或数组。每执行一次循环语句,循环变量就读取集合中的一

  • 问题内容: 我想动态更新元素的文本: 我是jQuery的新手,因此对我来说,这项任务似乎非常具有挑战性。有人可以指出我要使用的功能/选择器吗? 如果可能的话,我想在不为需要更改的文本添加新容器的情况下执行此操作。 问题答案: 在Javascript中,该属性为您提供元素的所有子节点,包括文本节点。 因此,如果您知道要更改的文本始终是元素中的第一件事,那么请给出以下HTML: 您可以这样做: 当然,

  • 问题内容: 这是我的脚本: 运行时,将打印: 我希望它保持相同的结构。我怎样才能做到这一点? 问题答案: 从Beautiful Soup文档中: 最常见的缺点BeautifulStoneSoup是它不了解自闭合标签。HTML具有一组固定的自闭标签,但对于XML,则取决于DTD所说的内容。您可以BeautifulStoneSoup通过将某些标签作为selfClosingTags构造函数的参数传递来告