+ оператор и строки
Я только начинаю в 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