Java: Не могли бы вы объяснить это простое выражение (System.out.println)?
System.out.println(1 + 2 + "3");
Вывод:
33
System.out.println("1" + 2 + 3);
Вывод:
123
Ответы
Ответ 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 раза.
Чтобы завершить целочисленное добавление сначала, вы должны использовать круглые скобки, например: