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

Конкатенация строки и чисел Java

Почему в этих случаях вывод отличается?

int x=20,y=10;

System.out.println("printing: " + x + y); == > Печать: 2010

System.out.println("printing: " + x * y); == > печать: 200

Почему не первый выход 30? Связано ли это с приоритетом оператора? Как первая "печать", а х объединяются, и тогда эта результирующая строка и y объединяются? Правильно ли я?

4b9b3361

Ответ 1

Его правило BODMAS

Я показываю порядок приоритетов ниже от более высокого к низкому:

B  - Bracket 
O  - Power
DM - Division and Multiplication
AS - Addition and Substraction

Это работает от Left to Right , если операторы имеют одинаковую приоритетность

Теперь

System.out.println("printing: " + x + y);

"printing: ": Строка "

"+": Является единственным перегруженным оператором в Java, который будет конкатенировать Number to String.        Поскольку здесь мы имеем оператор 2 "+", а x + y падает после "printing:" +, как уже было принято, и рассматривает x и y как строки также.

Таким образом, вывод 2010.

System.out.println("printing: " + x * y);

Здесь

"*": имеет более высокий приоритет, чем +

Итак, его x*y сначала, затем printing: +

Таким образом, выход 200

Сделайте это так, если хотите в качестве вывода в качестве вывода в первом случае:

System.out.println("printing: "+ (x+y));

Порядок приоритета Bracket выше до Addition.

Ответ 2

Базовая математика подсказывает, что добавление номеров выполняется каждый раз.

Итак, "печать": сначала вычисляется + x. Поскольку это строка + int, результат "печать: 20". Затем вы добавляете y так "печать: 20" + y равно "печать: 2010".

Во втором случае умножение является приоритетным. Итак, сначала вычисляется x * y и равно 200. Затем "печать:" + 200 равно "печать: 200".

Ответ 3

Результаты, которые вы наблюдаете, безусловно, связаны с приоритетом оператора, а также с порядком оценки. В отсутствие другого правила, то есть оператора с более высоким приоритетом, операторы оцениваются по порядку слева направо.

В первом выражении все операторы имеют одинаковый приоритет, потому что они являются одним и тем же оператором: +, и поэтому выполняется первая операция. Поскольку он включает String, это String конкатенация, а результат - String; аналогично для следующих +.

Во втором выражении один из операторов - *, который имеет более высокий приоритет, чем +, и поэтому сначала оценивается. Вы получаете результат умножения, целое число, а затем конкатенацию String и int из-за +.

Ответ 4

Откроется 30:

System.out.println("printing: " + (x + y))

Вам нужны скобки, чтобы выразить приоритет, который вы хотите.

Ответ 5

Это для приоритета оператора

System.out.println("printing: " + x * y);

здесь * оператор имеет более высокий приоритет, чем +, поэтому сначала он вычисляет x * y.

System.out.println("printing: " + x + y);

Здесь, где здесь все есть один и тот же оператор, и он будет рассматриваться как операция конкатенации строк, так как существует одно значение string.

если вы включили в нее скотч - System.out.println( "print:" + (x + y));

Затем скобка (оператор имеет более высокий приоритет, чем +, поэтому сначала он вычислит (x + y) и напечатает 30

проверить порядок приоритетов оператора

Ответ 6

В первой строке печати оператор + применяется сначала между String и int, а результатом является String, которая снова конкатенируется с другим int, результатом чего является String.

Во второй строке порядок операций: сначала умножение и результат int, конкатенированный с строкой.