Условные выражения представляют собой некоторое условие и возвращают значение типа boolean, то есть значение true (если условие истинно), или значение false (если условие ложно). К условным выражениям относятся операции сравнения и логические операции.
В операциях сравнения сравниваются два операнда, и возвращается значение типа boolean
- true
, если выражение верно,
и false
, если выражение неверно.
==
сравнивает два операнда на равенство и возвращает true
(если операнды равны) и false
(если операнды не равны)
int a = 10; int b = 4; boolean c = a == b; // false boolean d = a == 10; // true
!=
сравнивает два операнда и возвращает true
, если операнды НЕ равны, и false
, если операнды равны
int a = 10; int b = 4; boolean c = a != b; // true boolean d = a != 10; // false
< (меньше чем)
Возвращает true
, если первый операнд меньше второго, иначе возвращает false
int a = 10; int b = 4; boolean c = a < b; // false
> (больше чем)
Возвращает true
, если первый операнд больше второго, иначе возвращает false
int a = 10; int b = 4; boolean c = a > b; // true
>= (больше или равно)
Возвращает true
, если первый операнд больше второго или равен второму, иначе возвращает false
boolean c = 10 >= 10; // true boolean b = 10 >= 4; // true boolean d = 10 >= 20; // false
<= (меньше или равно)
Возвращает true
, если первый операнд меньше второго или равен второму, иначе возвращает false
boolean c = 10 <= 10; // true boolean b = 10 <= 4; // false boolean d = 10 <= 20; // true
Также в Java есть логические операции, которые также представляют условие и возвращают true или false и обычно объединяют несколько операций сравнения. К логическим операциям относят следующие:
|
c=a|b;
(c равно true
, если либо a, либо b (либо и a, и b) равны true
, иначе c будет равно false
)
&
c=a&b;
(c равно true
, если и a, и b равны true
, иначе c будет равно false
)
!
c=!b;
(c равно true
, если b равно false
, иначе c будет равно false
)
^
c=a^b;
(c равно true
, если либо a, либо b (но не одновременно) равны true
, иначе c будет равно false
)
||
c=a||b;
(c равно true
, если либо a, либо b (либо и a, и b) равны true
, иначе c будет равно false
)
&&
c=a&&b;
(c равно true
, если и a, и b равны true
, иначе c будет равно false
)
Здесь у нас две пары операций |
и ||
(а также &
и &&
) выполняют
похожие действия, однако же они не равнозначны.
Выражение c=a|b;
будет вычислять сначала оба значения - a и b и на их основе выводить результат.
В выражении же
c=a||b;
вначале будет вычисляться значение a, и если оно равно true
, то вычисление значения b уже смысла не имеет,
так как у нас в любом случае уже c будет равно true
. Значение b будет вычисляться только в том случае, если a равно false
То же самое касается пары операций &/&&
. В выражении c=a&b;
будут вычисляться оба значения - a и b.
В выражении же c=a&&b;
сначала будет вычисляться значение a,
и если оно равно false
, то вычисление значения b уже не имеет смысла, так как значение c в любом случае равно false
.
Значение b будет вычисляться только в том случае, если a равно true
Таким образом, операции ||
и &&
более удобны в вычислениях, позволяя сократить время на вычисление значения выражения и тем самым повышая
производительность. А операции |
и &
больше подходят для выполнения поразрядных операций над числами.
Примеры:
boolean a1 = (5 > 6) || (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается true boolean a2 = (5 > 6) || (4 > 6); // 5 > 6 - false, 4 > 6 - false, поэтому возвращается false boolean a3 = (5 > 6) && (4 < 6); // 5 > 6 - false, поэтому возвращается false (4 < 6 - true, но не вычисляется) boolean a4 = (50 > 6) && (4 / 2 < 3); // 50 > 6 - true, 4/2 < 3 - true, поэтому возвращается true boolean a5 = (5 < 6) ^ (4 > 6); // 5 < 6 - true, поэтому возвращается true (4 > 6 - false) boolean a6 = (50 > 6) ^ (4 / 2 < 3); // 50 > 6 - true, 4/2 < 3 - true, поэтому возвращается false