Лекция: Логический тип
Переменные логического типа могут принимать значение или true (истина), или false (ложь). Сразу обратите внимание, что нельзя вместо true и false писать нулевое и ненулевое значения (как, например, это можно делать в C/C++). Такое замены в Java нет.
Для переменных логического типа существуют операции & (и), && (и), | (или), || (или),! (не), ^ (исключающее или). Обратите внимание, что для «и» и «или» существует два варианта. Об их различии чуть ниже. Пока же приведем таблицы истинности:
| Оператор | Описание | Результат |
| && или & | и | Результат true только тогда, когда оба операнда равны true |
| || или | | или | Результат false только тогда, когда оба операнда равны false |
| ^ | исключающее или | Результат true только тогда, когда ровно один из операндов равен true |
| ! | не | Изменяет значение на противоположное (true на false, false на true) |
| == | логическое равно | Применяется к переменым любого типа. Результат true, если оба операнда равны true, false — в противном случае. |
Теперь о различии между && и & (|| и |). Операторы & и | — это обычные логические операторы, && и || — сокращенные. Вот конкретный пример для && и &:
...
k=20;
if (k<0 & k/0>1) //деление на 0 и возникнет ошибка
{
System.out.println(k);
}
if (k<0 && k/0>1) //деление на 0, но ошибки нет
{
System.out.println(k);
}
...
Т. е. в первом случае (с одним &) проверяются все части логического выражения, а во втором (с двумя &&) правая часть не проверяется (так как левая равна false).
Вот пример и для «или»:
...
k=20;
if (k>0 | k/0>1) //деление на 0 и возникнет ошибка
{
System.out.println(k);
}
if (k>0 || k/0>1) //деление на 0, но ошибки нет
{
System.out.println(k);
}
...
Здесь во втором случае так как левая часть равна true, то правая часть вообще проверяться не будет (и ошибка, соответственно не возникнет).
Также обратите внимание, что в качестве логического равно (т. е. когда мы отвечаем на вопрос, верно ли что что-то равно чему-то) используется двойное равно (==). Одинарное же равно используется для присваивания:
if(a==b){ //Если a равно b
{
a=c; //В a записываем c
}