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

Я только начинаю изучать 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?

Спасибо


person user2771463    schedule 12.09.2013    source источник
comment
+ - это оператор конкатенации, вы должны использовать оператор сложения внутри (), чтобы различать   -  person Nambi    schedule 12.09.2013


Ответы (9)


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

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

person Suresh Atta    schedule 12.09.2013

Если вы хотите выполнить какую-либо математику в System.out.println, оберните ее фигурными скобками, потому что Java видит String на 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 первым, и после добавления строки вам не нужны фигурные скобки

person Maxim Shoustin    schedule 12.09.2013

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

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

person Robert M.    schedule 12.09.2013

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

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

Во-вторых, «число» объединяется с 6, а затем с 20.

person Mingyu    schedule 12.09.2013

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

person Michael 'Maik' Ardan    schedule 12.09.2013

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

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

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

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

person Masudul    schedule 12.09.2013

Речь идет о двух вещах:

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

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

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
person Vincent van der Weele    schedule 12.09.2013

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

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

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

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

(На самом деле int преобразуются в String перед конкатенацией)

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

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

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

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

person Azodious    schedule 12.09.2013

Согласно вашему вопросу и ответу

объяснение

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
person Naveen Kumar Alone    schedule 12.09.2013