Why does the foreach statement not change the element value?

前端 未结 6 1035

How come the following prints boss and not bass?

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

for(char c : array)
{
 if (c== \'o\')
     c =          


        
相关标签:
6条回答
  • 2020-11-22 01:08

    Changes applied in 'for each' loop are made just inside her body (that's because values are copied, not referentions). To work on referentions use 'for' loop.

    0 讨论(0)
  • 2020-11-22 01:11

    You're changing the iteration variable c. That doesn't change the contents of the array. The iteration variable is just a copy of the array element. If you want to modify the array, you need to do so explicitly:

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

    Your original code is equivalent (as per section 14.14.2 of the JLS) to:

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

    Changing the value of a local variable will never change anything else - it just changes the local variable. The assignment:

    char c = array[i];
    

    copies the value in the array into a local variable. It doesn't associate the local variable with the array element perpetually.

    0 讨论(0)
  • 2020-11-22 01:13

    You variable c gets changed, but not the array contents. To change the array, don't use c, manipulate the array directly.

    for(int i = 0; i < array.length; i++)
    {
     char c = array[i];
     if (c== 'o')
         array[i] = 'a';
    }
    
    0 讨论(0)
  • 2020-11-22 01:15

    You're assigning 'a' to the local variable c, but not to the array element. To make it print bass, you'd need

    for (int i = 0; i < array.length; i++) {
        if (array[i] == 'o') {
            array[i] = 'a';
        }
    }
    
    0 讨论(0)
  • 2020-11-22 01:17

    This is because c = 'a' is assigning a to the local variable c which is not referencing the actual value present at that index of the array itself. It is just containing a copy of the value present at the specified index of array. So the change is actually made in the local variable not in the actual location where array[i] is referencing.. If you want to change value you should use the following indeed:

    int i = 0;
    for(char c : array)
    {
     if (c== 'o')
         array[i] = 'a'; 
      i++;
    }
    
    0 讨论(0)
  • 2020-11-22 01:21

    c's value is a copy of the value in array. Access array directly to change the value in question.

    0 讨论(0)
提交回复
热议问题