Java`da 3 tip operator mövcuddur:
- unary
- binary
- ternary
Java`da operatorlar öncəlik sırasına (operator precedence) görə dəyərləndirilir və əgər eyni öncəlik sırasına məxsus iki operator bir sətirdə yer alarsa, o zaman hesablanma qaydası adətən soldan-sağa doğru icra edilir.
Table 1. Order of operator precedence*
| Operator | Symbols and examples |
| Post-unary operators | expression++, expression−− |
| Pre-unary operators | ++expression, −−expression |
| Other unary operators | +, -, ! |
| Multiplication/Division/Modulus | *, /, % |
| Addition/Subtraction | +, – |
| Shift operators | <<, >>, >>> |
| Relational operators | <, >, <=, >=, instanceof |
| Equal to/not equal to | ==, != |
| Logical operators | &, ^, | |
| Short-circuit logical operators | &&, || |
| Ternary operators | boolean expression ? expression1 : expression2 |
| Assignment operators | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= |
assignment operatoru digər operatorlardan fərqli olaraq soldan-sağa doğru deyil, sağdan-sola doğru hesablanır. Eyni bir sətirdə zəncirvari şəkildə bir neçə dəyişənə dəyər mənimsətmək mümkündür, bir şərtlə ki, həmin dəyişənlər əvvəlcədən elan edilmiş olsunlar. Məsələn, aşağıdakı kod compile olunmayacaq:
int a = b = c = 100; // does not compile
Əgər b və c dəyişənini əvvəlcədən elan etsək kod compile olunacaq:
int b = 0, c = 0;
int a = b = c = 100;
Aşağıdakı formada yazılış da səhv deyil:
int b, c; // Not initializing b and c here.
int a = b = c = 100; // declaring a and initializing c, b, and a at the same time.
Sonuncu sətirdə ilk öncə c dəyişəninə dəyər mənimsədilir, daha sonra c`nin dəyəri b dəyişəninə mənimsədilir. Ən sonda isə a dəyişəninin dəyəri mənimsədilir.
Bütün aritmetik/riyazi operatorlar (arithmetic operators ⇒ *, /, %, +, -) boolean və String tiplərindən başqa istənilən primitiv java tipinə tətbiq edilə bilər. Ancaq + və += iki String dəyərini birləşdirmək üçün (concatenation) tətbiq edilə bilər.
String str = null + "k";
System.out.println(str); // output: nullk
String str2 = null + null; // DOES NOT COMPILE
Modul əməliyyatlarında ( % ), tutaq ki, bölünən (dividend) – y və bölən (divisor) – x olarsa:
- y – müsbət ədəd olarsa: nəticə həmişə 0 ilə (x-1) aralığında olur;
- y – mənfi ədəd olarsa: nəticə həmişə 0 ilə (-x+1) aralığında olur.
System.out.println(8%3); // output: 2 System.out.println(-8%3); // output: -2 System.out.println(8%-3); // output: 2 System.out.println(-8%-3); // output: -2
Nümunədən belə qərara gəlmək olar ki, bölənin (x) mənfi olub olmaması nəticəyə heç bir təsir göstərmir, ancaq bölünənin (y) qiymətini yoxlayır.
[topics lang=az]
