Słowo "boolean" w kontekście języka Java może być używane w różnych, choć bardzo powiązanych, znaczeniach. Może to być:
  • Typ prosty boolean lub zmienna boolean tego typu
  • Klasa Java Boolean lub obiekt osłonowy Boolean
  • Wyrażenie boolowskie, wartość logiczna, jakiś warunek
  • Operatory boolowskie w Javie
W tym artykule omówimy wszystkie te opcje i wyjaśnimy koncepcje leżące u podstaw wyrażeń logicznych (wyrażeń boolowskich). Boolean w Javie - 1

Czym jest boolean (wartość logiczna) w sensie ogólnym

Koncepcja wyrażenia boolowskiego pochodzi z matematyki a dokładniej z logiki matematycznej. Wyrażenie boolowskie w rachunku zdań to wyrażenie, o którym można powiedzieć, że jest prawdziwe lub fałszywe. Na przykład:
"Śnieg jest biały" "Krokodyle potrafią latać" "2 + 2 = 4"< "1 + 1 = 21"
Jednocześnie "2" i "śnieg" nie są wyrażeniami boolowskimi.

Typ prosty boolean w Javie i zmienne typu boolean

Kiedy mówimy o boolean w Javie, najczęściej chodzi o typ prosty boolean i zmienne typu boolean. Jak zapewne się domyślasz, zmienne tego typu mogą przyjmować dwie wartości, true lub false. Java ma dość rygorystyczne ograniczenia: boolean nie może być przekonwertowany na żaden inny typ danych i na odwrót. W szczególności boolean w Javie nie jest typem całkowitym i nie można używać wartości integer zamiast wartości logicznych boolean. Oto przykłady bezpośredniego ustawienia typu boolean:

boolean myBoolean; //boolean variable
myBoolean = false; 
boolean myBoolean1 = true; //another boolean variable
Mamy tu dwie zmienne typu boolean. Napiszmy mały program z przykładem użycia typu boolean:

//boolean variable example
public class BoolTest {

   public static void main(String[] args) {
       boolean myBoolean = false;
       System.out.println(myBoolean);
   }
}
Ten program wyświetla w konsoli "false". Nawiasem mówiąc, zmienna typu boolean jest domyślnie ustawiana na false, ale Java nie pozwala na pracę z niezainicjowanymi zmiennymi lokalnymi.

Wyrażenia boolowskie w Javie

Oprócz jawnego inicjowania zmiennej boolean jako true lub false, w wielu miejscach używamy typu boolean niejawnie. Tak jak wynikiem każdego dodawania liczb będzie liczba, tak wynik każdego porównania przyjmuje wartość true lub false, czyli jest typu boolean. Oznacza to, że oprócz bezpośredniego określenia wartości logicznej za pomocą instrukcji przypisania zmiennej wartości typu boolean, wartości logiczne (boolowskie) wynikają z różnych porównań, takich jak 5 > 2 i są używane głównie w instrukcjach warunkowych i pętlach. Oto przykład takiego użycia typu boolean:

public class BoolTest {

   public static void main(String[] args) {
       boolean myBoolean = false;
       int a = 5;
       int b = 7;
       System.out.println(a < b);
       System.out.println(0 > 7);
       System.out.println(myBoolean == false);
   }
}
Wyświetlone zostanie:
true false true
W przypadku a < b, operator < porównuje wyrażenie po lewej stronie z wyrażeniem po prawej stronie. Wynik porównania został wyświetlony na ekranie. Ponieważ 5 < 7 (stwierdzenie jest prawdziwe), w konsoli wyświetlona zostanie wartość true. W drugim przypadku wyświetlamy wynik bezpośredniego porównania wartości zero i siedem, a w trzecim pytamy, czy zmienna myBoolean ma wartość false. Ponieważ tak jest, wyświetlana jest wartość true. W rzeczywistości do budowania wyrażeń boolowskich w Javie możemy użyć dowolnych operatorów porównania:
operatory porównania Operator Java Przykład operacji Wynik operacji
Mniejsze < a < b true jeżeli a jest mniejsze od b, w przeciwnym wypadku false
Większe > a > b true jeżeli a jest większe od b, w przeciwnym wypadku false
Mniejsze lub równe <= a <= b true jeżeli a jest mniejsze od b lub ich wartości są równe, w przeciwnym wypadku false
Większe lub równe >= a >= b true jeżeli a jest większe od b lub ich wartości są równe, w przeciwnym wypadku false
Równe == a == b true jeżeli a jest równe b, w przeciwnym wypadku false
Różne != a != b true jeżeli a jest różne b, w przeciwnym wypadku false

Gdzie używane są wartości logiczne (boolean)

Wartości logiczne i wyrażenia warunkowe są bardzo często używane w warunkach instrukcji rozgałęzień, operatorach trójargumentowych i pętlach. W rzeczywistości ich działanie opiera się na sprawdzaniu pewnych wyrażeń boolowskich. Na przykład:

public class BoolTest2 {
       public static void main(String[] args) {
           int i = 0;
           while (i <= 10)
           {
               System.out.println(i);
               i++;
           }         
      }
}
Ten program wypisuje ciąg liczb całkowitych, zwiększając wartość o jeden tak długo, jak warunek w nawiasach po while jest spełniony. Czyli dopóki wyrażenie i <=10 ma wartość true. Boolean w Javie - 2

Operatory boolowskie w Javie Budowanie wyrażeń logicznych za pomocą operatorów boolowskich

W Javie dostępne są następujące operacje logiczne (lub boolowskie):
  • Logiczna negacja, to również NOT lub inwersja. W Javie oznaczana symbolem ! przed wyrażeniem.

  • Iloczyn logiczny, to również AND lub koniunkcja. Oznaczany symbolem & między dwoma wyrażeniami, do których jest stosowany.

  • Suma logiczna w Javie, to również OR lub alternatywa. W Javie oznaczana symbolem | między dwoma wyrażeniami.

  • Alternatywa rozłączna, XOR, alternatywa wykluczająca. W Javie oznaczana symbolem ^ między dwoma wyrażeniami.

  • W Javie operatory logiczne obejmują również warunkowe LUB, oznaczane jako ||, a także warunkowe ORAZ, &&.

Przyjrzyjmy się tabeli z krótkim opisem każdego z operatorów logicznych w Javie, a poniżej opiszemy je bardziej szczegółowo i podamy przykłady kodu. Przez "operandy" w tabeli rozumiemy wyrażenia logiczne lub zmienne, do których stosowany jest operator.

a | b == true
Operator boolowski w Javie Nazwa Typ Opis Przykład
! Logiczne "nie" (negacja) jednoargumentowy      !x oznacza "nie x". Zwraca true jeśli x ma wartość false. Zwraca false jeśli x ma wartość true.

boolean x = true;

wtedy


// !x == false
& Logiczne "i" (oraz, iloczyn logiczny) dwuargumentowy      (a & b) zwraca true jeżeli zarówno a jak i b mają wartość true.

a = true;
b = false;

wtedy


a & b == false
| Logiczne LUB (suma logiczna) dwuargumentowy      (a | b) zwraca true jeśli a lub b lub oba operandy mają wartość true.

a = true;
b = false;

wtedy

^ Alternatywa rozłączna OR (XOR) dwuargumentowy      (a ^ b) zwraca true, jeżeli tylko jeden z operandów (a lub b) ma wartość true. Zwraca false, jeżeli a i b mają jednocześnie wartość true lub false. W rzeczywistości, jeśli a jest różne od b zwracana jest wartość true.

a = true;
b = false;

wtedy


a ^ b == true
&& Warunkowe AND (skrócone logiczne ORAZ) dwuargumentowy      a && b to to samo co a & b, ale jeśli a ma wartość false, operator zwraca false bez sprawdzania b.
|| Warunkowe OR (skrócone logiczne LUB) dwuargumentowy      a || b to to samo co a | b, ale jeśli a ma wartość true, operator zwraca true bez sprawdzania b.
Zauważ, że w Javie operatory &, | i ^ mają zastosowanie również do liczb całkowitych. W tym przypadku działają one nieco inaczej i są nazywane logicznymi operatorami bitowymi (lub binarnymi). Przejdźmy do przykładów i wyświetlmy kilka wyrażeń logicznych skomponowanych za pomocą operatorów logicznych.

public class BoolTest2 {
   public static void main(String[] args) {
   int a = 5;
   int b = 7;
   boolean myBool1 = true;
   boolean myBool2 = false;
       System.out.println(myBool1&myBool2);
       System.out.println(myBool1|myBool2);
       System.out.println(!myBool1);
       System.out.println((a > b) & !myBool1 | myBool2);
   }
}
Oto wynik:
false true false false
W rzeczywistości za pomocą operatorów logicznych można tworzyć bardzo złożone konstrukcje logiczne, na przykład
(a<!b)&(q+1 == 12)^(!a | c & b > 1 + b)|(q ^ a > !b)
Jeżeli wszystkie zmienne zostały zainicjowane, takie konstrukcje będą działać. Jednak nie należy ich nadużywać, ponieważ zmniejszają czytelność kodu. Niemniej jednak bardzo przydatna jest umiejętność radzenia sobie z takimi konstrukcjami logicznymi. Spróbuj tworzyć wyrażenia logiczne z innymi operatorami podanymi w tabeli

Kolejność wykonywania działań logicznych

Podobnie jak w matematyce, w programowaniu operatory mają określoną kolejność wykonywania, jeżeli występują w tym samym wyrażeniu. Operatory jednoargumentowe mają pierwszeństwo przed dwuargumentowymi, a iloczyn (nawet logiczny) przed sumą. Oto operatory logiczne w kolejności ich wykonywania, umieszczone wyżej mają wyższy priorytet:
  • !

  • &

  • ^

  • |

  • &&

  • ||

Typ osłonowy Boolean w Javie

W Javie każdy typ prosty ma "brata", klasę osłonową (opakowującą). Klasa opakowująca to specjalna klasa, która przechowuje wewnątrz wartość typu prostego. Jednak jest to klasa, dlatego możesz tworzyć jej instancje (obiekty). Obiekty te przechowują potrzebne wartości typów prostych, będąc jednocześnie prawdziwymi obiektami. Typ prosty boolean w Javie ma klasę osłonową Boolean (przez duże B). Obiekty klasy Boolean tworzy się tak jak wszystkie inne:

Boolean b = new Boolean(false);
Klasa Boolean w Javie posiada przydatne metody. Jedną z najciekawszych jest metoda parseBoolean. Metoda static boolean parseBoolean(String s) parsuje string z argumentu jako boolean. Zwracany boolean ma wartość true, jeśli argument string jest niepusty i bez rozróżniania wielkości liter jest równy ciągowi tekstowemu "true". W przeciwnym razie zwraca false.

Przykład metody parseBoolean


public class BoolTest2 {

        public static void main(String[] args)
        {
            System.out.println(Boolean.parseBoolean("True"));
            System.out.println(Boolean.parseBoolean("TRuE"));
            System.out.println(Boolean.parseBoolean("False"));
            System.out.println(Boolean.parseBoolean("here"));

        }
    }
Wyświetlone zostanie:
true true false false