为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2019-06-18 13:08:35
为什么foreach语句不更改元素值?为什么下面印的是老板而不是贝斯?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.
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

您正在更改迭代变量c..这不会改变数组的内容。迭代变量只是一个复制数组元素的。如果要修改数组,则需要显式地这样做:

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

您的原始代码是等效的(如第14.14.2节)至:

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

更改局部变量的值将永远不会改变其他任何东西-它只是更改局部变量。任务:

char c = array[i];

复制件数组中的值放入局部变量中。它不会永远将局部变量与数组元素关联起来。


查看完整回答
反对 回复 2019-06-18
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

这是因为c = 'a'正在分配a到局部变量c对象的索引处的实际值。array本身。它只是包含在指定索引处的值的副本。array..因此,更改实际上是在局部变量中进行的,而不是在实际位置array[i]是指.。如果您想要更改值,则应该确实使用以下内容:

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


查看完整回答
反对 回复 2019-06-18
?
九州编程

TA贡献1785条经验 获得超4个赞

你变量c获取更改,但不更改数组内容。若要更改数组,请不要使用c直接操作数组。

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


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 731 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号