Переменные логического типа могут принимать значение или 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
}