Привет! Сегодня мы рассмотрим очень важную тему, а именно операции над числами в Java. Коротко: в Java есть арифметические операции (+, -, *, /, %), операции сравнения (==, !=, >, < и т.д.), унарные (унарный минус, инкремент ++ и декремент --), комбинированные (+=, -= и т.д.) и логические (!, &&, ||). Ниже разберем каждую группу с примерами. Числа в программировании повсюду. Если копнуть в школьный курс, можно вспомнить, что вся информация в компьютере представлена в числовом формате, комбинациями нулей и единиц, которое еще называют двоичным кодом.

Кратко

  • Арифметические: +, -, *, /, а также % (остаток от деления).
  • Сравнение: ==, !=, >, <, >=, <=. Важно: равенство это ==, а один знак = это присваивание.
  • Унарные: унарный минус, инкремент ++ и декремент --.
  • Инкремент и декремент бывают префиксные (++x) и постфиксные (x++): порядок выполнения у них разный.
  • Комбинированные: +=, -=, *=, /=, %= (x += y это x = x + y).
  • Логические: ! (НЕ), && (И), || (ИЛИ) для значений boolean.
Операции над числами в Java: арифметика, сравнение, инкремент, комбинированные и логические операторыОпераций над числами в программировании существует великое множество, поэтому мы рассмотрим наиболее важные из них с примерами :)

Арифметические операции

Начнем с самого простого, с арифметических операций. Это известные всем сложение (знак +), вычитание (-), умножение (*) и деление (/).

public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = 33;

       System.out.println(x+y);
       System.out.println(x-y);
       System.out.println(x*y);
       System.out.println(x/y);
   }
}
Вывод в консоль:

1032
966
32967
30
Всем этим ты уже пользовался. К ним можно прибавить операцию %, остаток от деления.

public class Main {

   public static void main(String[] args) {

       int x = 33;
       int y = 33%2;
       System.out.println(y);
   }
}
Вывод в консоль:

1
В этом примере мы делим 33 на 2. В результате у нас получается 16 и остается лишний "хвост", который на 2 не делится, единица. Этот "хвост" и будет результатом операции "остаток от деления". В Java (как и в математике) реализованы операции сравнения. Они тебе тоже наверняка знакомы еще со школы:
  • равно (==)
  • больше (>)
  • меньше (<)
  • больше либо равно (>=)
  • меньше либо равно (<=)
  • не равно (!=)
Здесь стоит обратить внимание на один важный момент, в котором многие новички допускают ошибки. Операция "равно" записывается как ==, а не одним знаком =. Единичный знак = в Java является оператором присваивания, когда переменной присваивается число, строка, или значения другой переменной. Разница между оператором присваивания = и оператором сравнения == в Java

public class Main {

   public static void main(String[] args) {

       int x = 33;
       int y = 999;
       System.out.println(x=y);//ожидаем, что в консоль будет выведено false
   }
}
Вывод в консоль:

999
Упс! Это явно не тот результат, на который мы рассчитывали. Это вообще другой тип данных: мы ожидали увидеть boolean, а получили число. Все потому, что в скобках у нас операция присваивания, а не сравнения. x=y Значение y (999) было присвоено переменной x, и после мы вывели x на консоль. Правильный вариант:

public class Main {

   public static void main(String[] args) {

       int x = 33;
       int y = 999;
       System.out.println(x==y);
   }
}
Вывод в консоль:

false
Вот теперь мы правильно сравнили 2 числа! :) Еще одна особенность операции присваивания (=): ее можно осуществлять "по цепочке":

public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = 33;
       int z = 256;

       x = y = z;
       System.out.println(x);
   }
}
Вывод в консоль:

256
Запомни: присваивание осуществляется справа налево. Данное выражение (x = y = z) будет выполнено по шагам:
  1. y = z , то есть у = 256
  2. x = y, то есть x = 256

Унарные операции

Они называются "унарными" от слова "uno", то есть "один". Такое название они получили потому, что в отличие от предыдущих, проводятся над одним числом, а не над несколькими. К ним относятся:
  • Унарный минус. Он меняет знак числа на противоположный.

    
    public class Main {
    
       public static void main(String[] args) {
    
           int x = 999;
    
           //меняем знак первый раз
           x = -x;
           System.out.println(x);
    
           //меняем знак второй раз
           x= -x;
           System.out.println(x);
       }
    }
    

    Вывод в консоль:

    
    -999
    999
    

    Мы использовали унарный минус два раза. В результате наше число стало сначала отрицательным, а потом снова положительным!

  • Инкремент (++) и декремент (--)

    Операция ++ увеличивает число на единицу, а операция -- уменьшает на эту же самую единицу.

    
    public class Main {
    
       public static void main(String[] args) {
    
           int x = 999;
           x++;
           System.out.println(x);
    
           x--;
           System.out.println(x);
       }
    }
    

    Вывод в консоль:

    
    1000
    999
    
Такая форма записи может быть тебе знакома, если ты слышал о языке С++. С помощью такого интересного названия его создатели передали свою идею: "C++ является расширением языка C". А популярная улучшенная версия "Блокнота" называется Notepad++ Важный момент. Операции инкремента и декремента бывают двух видов: постфиксными, и префиксными. x++ это постфиксная запись ++x это префиксная запись В чем же заключается принципиальная разница, если ставить плюсы-минусы перед числом или после? Увидим на примере:

public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = x++;
       System.out.println(y);
   }
}
Вывод в консоль:

999
Что-то не так! Мы хотели увеличить x на 1 и присвоить новое значение переменной y. То есть y должен быть равен 1000. Но у нас другой результат, 999. Получается, x не был увеличен, и операция инкремента не сработала? Еще как сработала. Чтобы в этом убедиться, попробуй вывести x на консоль в конце :)

public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = x++;
       System.out.println(y);
       System.out.println(x);
   }
}
Вывод в консоль:

999
1000
На самом деле, постфиксная операция потому так и называется: она выполняется после основного выражения. То есть выражение int y = x++; происходит по шагам:
  1. сначала y = x (переменной y присваивается изначальное значение x),
  2. а только потом x++ (x увеличивается на 1).
Как быть, если нас не устраивает такое поведение? Нужно использовать префиксный способ записи:

public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = ++x;
       System.out.println(y);
   }
}
В этом случае выражение int y = ++x; происходит по шагам:
  1. сначала отработает ++x (x увеличивается на 1),
  2. и только после этого y = x;.
Эту разницу стоит запомнить сразу, чтобы не совершить ошибок в реальной программе, в которой все поведение может из-за этого встать с ног на голову :)

Комбинированные операции

Кроме того, в Java существуют так называемые комбинированные операции. В них используется комбинация из двух операций:
  • Присваивание
  • Арифметическая операция
Сюда входят операции:
  • +=
  • -=
  • *=
  • /=
  • %=
Рассмотрим пример:

public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = 33;

       x += y;
       System.out.println(x);
   }
}
Вывод в консоль:

1032
x += y означает x = x + y. Просто для краткости записи используется два знака подряд. Так же это работает с комбинациями -=, *= , /= и %=.

Логические операции

Помимо операций над числами, в Java существуют также операции над булевыми переменными, true и false. Эти операции выполняются с помощью логических операторов
  • !, оператор "НЕ". Меняет значение булевой переменной на противоположное

    
    public class Main {
    
       public static void main(String[] args) {
    
           boolean x = true;
           System.out.println(!x);
       }
    }
    

    Вывод в консоль:

    
    false
    

  • &&, оператор "И". Возвращает значение true только в том случае, если оба операнда являются true.

    
    public class Main {
    
       public static void main(String[] args) {
    
           System.out.println(100 > 10 && 100 > 200);
           System.out.println(100 > 50 && 100 >= 100);
       }
    }
    

    Вывод в консоль:

    
    false
    true
    

    Результатом первой операции является false, поскольку одно из условий является ложным, а именно 100 > 200. Оператору && для того, чтобы вернуть true требуется, чтобы истинными были все условия (как во второй строке, например).

  • ||, оператор "ИЛИ". Возвращает true, когда хотя бы один из операндов истинный.

    Здесь наш предыдущий пример уже отработает по-другому:

    
    public class Main {
    
       public static void main(String[] args) {
    
           System.out.println(100 > 10 || 100 > 200);
       }
    }
    

    Вывод в консоль:

    
    true
    

    Выражение 100 > 200 по-прежнему ложно, но оператору "или" вполне достаточно, что первая часть (100 > 10) является истинной.

Сводная таблица операций над числами

Чтобы все операции были перед глазами, соберем их в одну таблицу:
КатегорияОператорыЧто делаютПример
Арифметические+ - * /сложение, вычитание, умножение, делениеx + y
Остаток от деления%возвращает остаток от деления33 % 2 дает 1
Сравнение== != > < >= <=сравнивают значения, результат booleanx == y
Присваивание=задает переменной значениеx = 5
Унарный минус-меняет знак числаx = -x
Инкремент и декремент++ --увеличивает или уменьшает на 1x++, x--
Комбинированные+= -= *= /= %=арифметическая операция плюс присваиваниеx += y это x = x + y
Логические! && ||НЕ, И, ИЛИ для значений booleana && b
Часто числа, над которыми выполняются эти операции, вводит сам пользователь. Как считать их с клавиатуры, разобрано в статье про класс Scanner.

Читайте также

Вопросы и ответы

Какие арифметические операции есть в Java?

Сложение (+), вычитание (-), умножение (*), деление (/) и остаток от деления (%).

Чем отличается = от == в Java?

Один знак = это присваивание (переменной задается значение), а два знака == это сравнение на равенство, которое возвращает true или false. Их путаница частая ошибка новичков.

Что делает оператор % (остаток от деления)?

Он возвращает остаток от деления одного числа на другое. Например, 33 % 2 равно 1.

Чем префиксный инкремент отличается от постфиксного?

При постфиксном x++ сначала используется текущее значение x, а потом оно увеличивается. При префиксном ++x значение сначала увеличивается, а потом используется.

Что такое комбинированные операции?

Это сокращения, объединяющие арифметику и присваивание: +=, -=, *=, /=, %=. Например, x += y означает x = x + y.

Как работают логические операторы && и ||?

&& (И) возвращает true, только если оба условия истинны. || (ИЛИ) возвращает true, если истинно хотя бы одно условие. ! (НЕ) меняет булево значение на противоположное.