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

Почему в этих случаях результат отличается?

int x=20,y=10;

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

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

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

Его правило BODMAS

Я показываю Приказ приоритета ниже от Высшего к Низкому:

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

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

Теперь

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

"printing: " : String ”

"+" : Является единственным перегруженным оператором в 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 .

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

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

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

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

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

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

Это напечатает 30 :

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

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

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

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

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

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

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

если вы включаете в нее скобки – System.out.println («печать:« + (x + y));

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

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

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

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

System.out.println("2*("+a"+"+b"*"+c")")

Как напечатать это

  • Android RecyclerView добавление и удаление элементов
  • Разделить значение int на отдельные цифры
  • Android - обновить контакт
  • декомпиляция DEX в исходный код Java
  • Android (JSONObject) Как я могу пройти через плоский объект JSON, чтобы получить каждый ключ и каждое значение
  • Строковый постоянный пул
  • com.android.build.transform.api.TransformException
  • Android имитирует нажатие клавиши
  • NoClassDefFoundError - Eclipse и Android
  • java.io.StreamCorruptedException: недопустимый заголовок streamа: 54657374
  • Переменная Java, помещенная в стек или кучу
  • Interesting Posts

    Как создать значение по умолчанию для атрибутов в модели Rails activerecord?

    Распределение памяти: стек против кучи?

    Git vs SVN: эффективность хранения веб-сайта

    Скорость соединения снижается с 1 Гбит / с до 10 Мбит / с (Vista 64)

    Кордова 3.5.0 Установите ошибку – установите Android-цель 19

    Отключить Vista UAC только для администратора

    Бесплатное приложение Mac OS X для загрузки всего веб-сайта

    SchemaFactory не поддерживает XML-схему W3C на уровне платформы 8?

    Можно ли создавать стандартные шаблоны контейнеров с неполными типами?

    Как получить IP-адрес пользователя на сервере Meteor?

    возвращает указатель на литеральный (или постоянный) массив символов (строка)?

    Реализация загрузчика с использованием httpInterceptor и AngularJS 1.1.5

    Как использовать Assert для проверки того, что было выбрано исключение?

    Как использовать инструкции if в LESS

    Угловая JS: Какова потребность в функции ссылки директивы, когда у нас уже есть controller директивы с объемом?

    Давайте будем гением компьютера.