Подтвердить что ты не робот

Java: Не могли бы вы объяснить это простое выражение (System.out.println)?

System.out.println(1 + 2 + "3");

Вывод: 33

System.out.println("1" + 2 + 3);

Вывод: 123

4b9b3361

Ответ 1

Ну, это вещь, называемая порядком операций.

1 + 2 вычисляется равным 3, а затем добавляется строка "3", которая преобразует первые 3 в строку и печатает "33".

В вашем втором экземпляре "1" уже является строкой, поэтому добавление чисел преобразует их в строки для соответствия, поэтому добавление "2", а затем добавление "3" и печать "123".

P.S. Строки имеют приоритет, потому что они имеют более высокий приоритет каста, чем целые, поэтому он преобразует целые числа в строки, но не строки в целые числа, как со вторым примером.

Ответ 2

Первый оператор добавляет 1 и 2 (так как оба являются целыми), а затем преобразует их в строку и добавляет строку "3".

Второй оператор имеет строку "1" и преобразует все следующие аргументы в строки. Итак, вы получаете 123.

Ответ 3

В случае 1 + 2 + "3"

Сложение 1 и 2 выполняется первым, следующим 3 соединено с 3.

В "1" + 2 + 3

1 объединяется в 2, и результат ( "12" ) объединяется с 3

Следует помнить следующее:

Если любой из операндов в + является строкой +, действует как конкатенация else, она работает как дополнение.

Ответ 4

В случае первого, он делает 1 + 2, тогда он выполняет операцию конкатенации строк, чтобы он дал вам 33.

В случае второго оператора он выполняет конкатенацию строк для всех операндов, поскольку первая

Оператор

- строка. Чтобы он дал вам 123

Ответ 5

Я не эксперт по Java, но, полагаю, выражения читаются слева направо здесь.

В первом случае сначала вычисляется 1 + 3, что дает 3 затем 3 + "3", которые преобразуют первые 3 в строку и дают "33"

Во втором случае он начинается с "1" + 2, который дает "12", а затем "12" + 3 = "123"

Это побочный эффект наличия оператора +, который объединяет 2 строки и другую, которая добавляет 2 числа.

Ответ 6

Это определяется Спецификация Java Language # 15.18.1

Оператор + синтаксически лево-ассоциативный, независимо от того, определяется ли он анализом типов для представления конкатенации строк или числового добавления. В некоторых случаях для получения желаемого результата требуется уход. Например, выражение:
a + b + c
всегда рассматривается как значение:
(a + b) + c

Тогда для каждой подгруппы (a+b) (назовем ее x) и (x + c):

Если только одно выражение операнда имеет тип String, то преобразование строки (§ 5.1.1.11) выполняется в другом операнде для создания строки во время выполнения.

Ответ 7

Компилятор преобразует операнд в его эквивалент строки каждый раз, когда другой операнд + - это экземпляр Строка.

Для второго случая: Приоритет оператора приводит к тому, что сначала выполняется конкатенация "1" со строковым эквивалентом 2. Этот результат затем объединяется со строковым эквивалентом 3 раза.

Чтобы завершить целочисленное добавление сначала, вы должны использовать круглые скобки, например:

System.out.println("1" + (2 + 3));

В первом случае: Приоритет оператора сначала добавит 1 и 2. Теперь строковый эквивалент этого результата затем объединяется с "3".

Ответ 8

System.out.println(-1 → > 1);

Во втором случае: приоритет оператора приводит к тому, что первое совпадение имеет значение "1" с эквивалентом строки 2. Этот результат затем объединяется со строковым эквивалентом 3 раза.

Чтобы завершить целочисленное добавление сначала, вы должны использовать круглые скобки, например: