Изменение элементов внутри массива

Я не понимаю, почему ответ на этот вопрос — BABA в соответствии с обучением Киры и BBBB, когда я добавляю в w3schools. По моим собственным расчетам, я получил ABBA. Согласно визуализатору Java, w3schools и

Моя работа:

ba[0] = "A", который меняется на ab[1] (B). ba = {"B", B"}

ba[1] = "B", который меняется на ab[0] (A). ba = {"B", "A"}

ab = {"A","B"}

ba = {"B", "A"}

ab[0] + ab[1] + ba[0] + ba[1] = АББА

Просветите меня, где я ошибся, я новичок в Java. Вопрос звучит так:

String[] ab = {"A", "B"};
String[] ba = ab;
ba[0] = ab[1];
ba[1] = ab[0];
System.out.println(ab[0] + ab[1] + ba[0] + ba[1]);

Попробуйте инициализировать baby String[] ba = new String[2]; вместо String[] ba = ab;.

Malki Mohamed 16.04.2024 10:48

Я не могу этого сделать, потому что не могу изменить вопрос, который задал Кира-обучение. Но спасибо за предложение.

sjj 16.04.2024 10:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не скопировали массив в ba, но сделали ссылку. Изменение содержимого одного меняет его для обоих.

ba[0] = ab[1];
// ab[0] is now also set to ab[1], so ab[0] is B and ab[1] is B

ba[1] = ab[0];
// ab[1] is now also set to ab[0]

Чтобы достичь того, чего вы ожидаете, используйте Array.clone():

String[] ab = {"A", "B"};
String[] ba = ab.clone();
ba[0] = ab[1];
ba[1] = ab[0];
System.out.println(ab[0] + ab[1] + ba[0] + ba[1]);

Ох, значит массив не меняется. Я могу просто рассматривать ba[0], ab[1], ba[1] и ab[0] как переменные. ba[0] = B, ab[1] = A, ba[1] = A и ab[0] = B. Следовательно, ответ — БАБА. Теперь я это вижу, спасибо!

sjj 16.04.2024 10:45

@sjj Ответ: «BBBB». После ba[0] = ab[1] «A» больше не существует.

Ricky Mo 16.04.2024 10:55

@RickyMo это потому, что ba[0] (A) = ab[1] (B). итак ба = {"B", "B"}. и поскольку ba = ab, ab и ba равны {"B", "B"}. В результате ответом будет BBBB?

sjj 16.04.2024 11:04

@sjj да, это так.

Ricky Mo 16.04.2024 11:05

Другие вопросы по теме