Поведение foreach при установке новых символов в строке - PullRequest
0 голосов
/ 20 марта 2019

Я только что прочитал вопрос о символах, и у меня возникли сомнения по этому поводу, поэтому я начал пробовать некоторый код ... Я пытаюсь установить все символы из строки по одному с помощью цикла, я пытался сfor и его версия forEach, это мои тесты:

String testString = "testing";
char[] array = testingString.toCharArray();

Затем циклы:

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

И это вывод для этого цикла: ( ожидается один)

"xxxxxxx"

Но потом я попробовал с другим форматом "для":

for(char c: array) {
    c = 'x';
}

И у меня это не сработало ..вывод был той же строкой («тестирование»).Я неправильно понимаю поведение каждого?Почему второй цикл не работает так же, как первый?Я использовал этот формат цикла много раз, но я не могу понять, почему не работает в этом случае.Я не знаком с типом символов, может быть, я что-то упускаю из этого.

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Как указано в JLS §14.14.2. Расширенный оператор for , следующий цикл:

for(char c: array) {
    c = 'x';
}

эквивалентно следующему базовому for утверждению:

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

Как видите, изменение c не повлияет на массив.

0 голосов
/ 20 марта 2019

Это потому, что вы редактируете символ, а не соответствующий символ в начальной строке. Возможно, вам следует занять позицию этих символов в строке и настроить ее.

...