Operatory
Operatory matematyczne:
- + dodaje 2 liczby
- - odejmuje dwie liczby
- * znak mnożenia
- / dzielenie całkowite
- % reszta z dzielenia
int a = 17;
int b = 4;
int c = a+b; //=21
c = a-b; //=13
c = a*b; //=68
c = a/b; //=4 ponieważ 4*4=16 i zostaje reszty 1
c = a%b; //=1 reszta z dzielenia
c = (a+b)/3; //=7
//Skrótowe operatory:
a += b; //a= a+b
a -= b; //a= a-b
a *= b; //a= a*b
a /= b; //a= a/b
a %= b; //a= a%b
c = a++; //przypisz c=a, a następnie zwiększ wartość a
c = ++a; //zwiększ wartość a, a dopiero wówczas przypisz
c = (a++)+b; //c=a+b, a następnie a = a+1
c = a+b++; //c=a+b, a dopiero później b = b+1;
Operatory porównujące i logiczne:
Opertaory te zwracają wartość true lub false.
- == sprawdza równość
- != różny
- >= większy równy
- <= mniejszy równy
- > , < większy, mniejszy
- && - AND - koniunkcja
- || - OR - alternatywa
int a = 5;
int b = 3;
boolean wynik;
wynik = a>b; //wynik==true
wynik = a<b; //wynik==false
wynik = a==b; //wynik==false
wynik = (a>b)&&(a!=b); //wynik == true, ponieważ (true) AND (true) == true
Priorytety operatorów:
Operatory mają różne priorytety. Od priorytetów poszczgólnych operatorów zależy kolejność wykonywania działań.
Operator + ma wyższy priorytet niż operator ==
Dlatego w pokazanym niżej przykładzie najpierw zostanie wykonane dodawanie, a dopiero później porównanie. W efekcie pierwszy wiersz zwróci wartość true.
Operator * ma wyższy priorytet niż +
Dlatego drugi wiersz zwróci wartość 17
10 == 4 + 6
3 * 5 + 2
Aby zmienić kolejność operacji, użyj nawiasów - np. następujący wiersz zwróci wartość 21:
3 * ( 5 + 2 )
Niżej pokazano przykład nieprawidłowego i prawidłowego zapisu:
"WARTOŚĆ: " + 2 != 2 // błąd kompilacji
"WARTOŚĆ: " + (2 != 2) // ten wiersz zwróci łańcuch "WARTOŚĆ: false"
Operator trójargumentowy:
- warunek? wyrażenie1 : wyrażenie2;
int a = 5;
int b = 3;
(a==b)? System.out.print("a jest równe b") : System.out.print("a NIE jest równe b"); //zostanie wyświetlony napis "a Nie jest równe b"
Operatory porównujące ciągi znaków lub obiekty:
Nie należy używać operatora == do porównywania typów obiektowych.
W przypadku typów obiektowych operator == porównuje wartości referencji, a nie wartości samych obiektów (patrz sekcja Zmienne i obiekty - stos i sterta (heap vs. stack))
Wyjątkowo operator == działa poprawnie w przypadku łańcuchów znaków (danych typu/klasy String).
UWAGA: metoda equals() działa inaczej dla obiektów klasy String, a inaczej dla obiektów klas innych niż String. Patrz sekcja Metoda equals().