+ оператор и строки

Я только начинаю в AP Comp sci в старшей школе, и я наткнулся на вопрос относительно оператора + в строках

Почему System.out.println ("number" + 6 + 4 * 5)результат в число 620

в то время как

String s = "crunch";
int a = 3, b = 1;
System.out.print(s + a + b);
System.out.print(b + a + s);

результат в crunch314crunch?

Спасибо

9 ответов

Решение

Зависит от порядка приоритета

Когда два оператора совместно используют операнд, оператор с более высоким приоритетом идет первым. Например, 1 + 2 * 3 рассматривается как 1 + (2 * 3), тогда как 1 * 2 + 3 рассматривается как (1 * 2) + 3, поскольку умножение имеет более высокий приоритет, чем сложение (+).

"*" имеет более высокий приоритет оператора, чем "+", это означает, что выражение "4 * 5" вычисляется до объединения строк.

См. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

Если вы хотите сделать любую математику в System.out.println, оберните его скобками, потому что Java видит строку на 1-м месте.

Пытаться System.out.println ("number" + (6 + 4 * 5)),

Для второго примера используйте: System.out.print(s + (a + b));

в этом случае у вас есть сумма a а также b,

но в System.out.print(b + a + s);b а также a остаться на 1-м месте. Компилятор делает a+b 1-й и после добавления строки, вам не нужны скобки

Почему System.out.println ("число" + 6 + 4 * 5) приводит к числу 620

Потому что * имеет более высокий приоритет, чем +, поэтому результат number620,

Строка s = "хруст"; int a = 3, b = 1; System.out.print(s + a + b); System.out.println(b + a + s); результат в crunch314crunch?

Здесь + используется как перегрузка оператора, а не как двоичная операция. Таким образом, "+" выполняет операцию concat, а не операцию sum. Итак, результат crunch314crunch,

Это как-то связано с приоритетом оператора:

Во-первых, 4 * 5 = 20

Во-вторых, "число" объединяется с 6, которое дополнительно объединяется с 20.

В вашем первом примере, поскольку вы использовали мультипликативный оператор, 4 умножается на 5, прежде чем объединяется с другой строкой.
Во втором примере вы начали с 2 целых чисел перед строкой, которые будут вычислены в первую очередь перед объединением в строку.

Все дело в приоритетах операторов и их ассоциативности.

Ваш первый пример: "число" + 6 + 4 * 5

Точность. на приоритет оператора * рассчитывается первым, поэтому становится "число" + 6 + 20

Теперь ассоциативность для + is Left -> Right (L->R), поэтому + становится оператором конкатенации, потому что используется с String Таким образом, выражение становится "число 6" + 20, а затем "число 620"

(На самом деле int преобразованы в String до объединения)

Точно так же ваш второй пример:

Только + оператор и начать выполнение из L-> R

"crunch" + 3 + 1 = "crunch3" + 1 = "crunch31"

1 + 3 + "хруст" = 4 + "хруст" = "4 хруст"

Это о двух вещах:

  • приоритет оператора
  • конкатенация строк и сложение

+ имеет следующие правила:

int + int => int
int + string => String 
String + int => String 
String + String => String

То есть, как только String вовлечен, + означает конкатенацию.

Операторы с одинаковым приоритетом оцениваются слева направо. Следовательно

String + int + int => String + int => String

но

int + int + String => int + String => String

В первом случае используется только конкатенация, а во втором - сложение на первом этапе.


В вашем первом примере * имеет более высокий приоритет, чем +, поэтому умножение выполняется первым.

String + int * int => String + int => String

По вашему вопросу и ответу

объяснение

1.
  A)System.out.println ("number" + 6 + 4 * 5);
  B)System.out.println ("number6" + 4 * 5);
  C)System.out.println ("number6" + 20);
  D)System.out.println ("number620");

И выводит вывод как

number620

И второй

2.
  A)System.out.print("crunch" + 3 + 1);
    System.out.print(1 + 3 + "crunch");
  B)System.out.print("crunch3" + 1);
    System.out.print(4 + "crunch");
  C)System.out.print("crunch31");
    System.out.print("4crunch");

И выводит вывод с помощью строки, почему, потому что вы использовали print() заявление

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