Operatörler
Operatörler, değerler üzerinde işlem yapan sembollerdir: toplama, karşılaştırma, mantıksal birleştirme... Programlamanın en temel yapı taşlarıdır ve her satırda kullanılırlar. Bu konu, Java operatörlerini kategori kat…
Operatörler
Operatörler, değerler üzerinde işlem yapan sembollerdir: toplama, karşılaştırma, mantıksal birleştirme... Programlamanın en temel yapı taşlarıdır ve her satırda kullanılırlar. Bu konu, Java operatörlerini kategori kategori ele alır ve özellikle yeni başlayanların takıldığı noktaları (int bölme, önek/sonek, kısa devre, öncelik) netleştirir.
Aritmetik operatörler
+ - * / % // toplama, çıkarma, çarpma, bölme, mod (kalan)
int bölme tuzağı:
17 / 5 == 3(ondalık atılır!). Ondalık için en az bir operanddoubleolmalı (topic 86).%(mod) kalanı verir:17 % 5 == 2— çift/tek kontrolü, döngüsel indeks gibi işlerde çok kullanılır.
Artırma/azaltma: ++ ve --
Önek (++x) ve sonek (x++) farklıdır:
int x = 5; System.out.println(x++); // 5 yazar, SONRA x=6 (önce kullan) int y = 5; System.out.println(++y); // 6 yazar (önce artır)
Atama operatörleri
= += -= *= /= %= // a += b == a = a + b
İlişkisel (karşılaştırma) operatörler
== != < > <= >= // sonuç boolean
Tuzak: Nesnelerde
==referansı karşılaştırır, içeriği değil. İçerik için.equals()kullan (String, wrapper'lar — topic 76).
Örnek 1 (./Ornek1.java) aritmetik, atama ve ilişkisel operatörleri gösterir.
Mantıksal operatörler ve kısa devre
&& (ve) || (veya) ! (değil)
Kısa devre (short-circuit) çok önemlidir: && ilk operand false ise ikinciyi
değerlendirmez; || ilk operand true ise ikinciyi değerlendirmez. Bu hem performans hem de
güvenlik sağlar:
if (s != null && s.length() > 0) { ... } // s null ise length() ÇAĞRILMAZ -> NPE önlenir
Örnek 2 (./Ornek2.java) kısa devreyi (yan etkili metotlarla) gösterir.
Üçlü (ternary) operatör
kosul ? a : b — bir değer döndüren mini if-else:
String durum = (yas >= 18) ? "yetişkin" : "reşit değil"; int max = (a > b) ? a : b;
Kısa koşullu atamalar için idealdir; ama iç içe üçlü operatörler okunabilirliği bozar (o zaman
if-else kullan).
Operatör önceliği (precedence)
Operatörler belirli bir sırayla değerlendirilir:
() > ++/-- /! > * / % > + - > < > <= >= > == != > && > || > ?: > = += ...
2 + 3 * 4 == 14 // * önce (2 + 3) * 4 == 20 // parantez önceliği değiştirir
Altın kural: Önceliği ezberlemeye çalışma; şüphedeysen parantez kullan. Parantez hem doğruluğu garanti eder hem okunabilirliği artırır.
Diğer operatörler
instanceof: Tip kontrolü (+ pattern matching, topic 86).- Bit operatörleri (
& | ^ ~ << >> >>>): Bit düzeyinde — sonraki konu (topic 90). +(String): İki String'i veya String+değeri birleştirir ("x" + 5).
Özet
Java operatörlerini kategori kategori öğrendik: aritmetik (int bölme/mod tuzağı), önek/sonek
++/--, atama ve ilişkisel (Örnek 1); mantıksal operatörler, kısa devre (güvenlik!), üçlü
operatör ve öncelik ("şüphede parantez"; Örnek 2). Sırada, bit düzeyinde çalışan güçlü ama az
bilinen operatörler: bitwise operatörler.
▶ Kod Örnekleri(2)
Ornek1
çalıştırılabilir1// Ornek1: Aritmetik, atama ve ilişkisel operatörler.
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5 public static void main(String[] args) {
6 // ARİTMETİK: + - * / %
7 int a = 17, b = 5;
8 System.out.println("17 + 5 = " + (a + b));
9 System.out.println("17 - 5 = " + (a - b));
10 System.out.println("17 * 5 = " + (a * b));
11 System.out.println("17 / 5 = " + (a / b) + " (int bölme -> 3, ondalık atılır)");
12 System.out.println("17 % 5 = " + (a % b) + " (kalan / mod)");
13
14 // ARTIRMA/AZALTMA: ++ -- (önek vs sonek FARKI)
15 int x = 5;
16 System.out.println("\nx=5; x++ -> " + (x++) + " (önce kullan, sonra artır), şimdi x=" + x);
17 int y = 5;
18 System.out.println("y=5; ++y -> " + (++y) + " (önce artır, sonra kullan), şimdi y=" + y);
19
20 // ATAMA operatörleri: = += -= *= /= %=
21 int sayac = 10;
22 sayac += 5; System.out.println("\n10 += 5 -> " + sayac);
23 sayac *= 2; System.out.println(" *= 2 -> " + sayac);
24 sayac %= 7; System.out.println(" %= 7 -> " + sayac);
25
26 // İLİŞKİSEL (karşılaştırma): == != < > <= >= (sonuç boolean)
27 System.out.println("\n7 > 3 : " + (7 > 3));
28 System.out.println("7 == 7 : " + (7 == 7));
29 System.out.println("7 != 3 : " + (7 != 3));
30
31 System.out.println("""
32
33 --- Aritmetik, atama, ilişkisel ---
34 Aritmetik: + - * / % (mod=kalan). int/int bölme ondalığı ATAR (17/5=3).
35 ++/-- : önek (++x) önce artırır; sonek (x++) önce kullanır sonra artırır.
36 Atama: =, ve kısa hali += -= *= /= %= (a += b == a = a + b).
37 İlişkisel: == != < > <= >= -> boolean döndürür (koşullarda kullanılır).
38 NOT: nesne eşitliğinde == referansa bakar; içerik için .equals() (topic 76).""");
39 }
40}Ornek2
çalıştırılabilir1// Ornek2: Mantıksal operatörler, kısa devre (short-circuit), üçlü operatör ve öncelik.
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5 static boolean kontrol(String ad, boolean deger) {
6 System.out.println(" (" + ad + " değerlendirildi)");
7 return deger;
8 }
9
10 public static void main(String[] args) {
11 // MANTIKSAL: && (ve), || (veya), ! (değil) — boolean üzerinde.
12 System.out.println("true && false = " + (true && false));
13 System.out.println("true || false = " + (true || false));
14 System.out.println("!true = " + (!true));
15
16 // KISA DEVRE (short-circuit): && ilk operand false ise İKİNCİYİ DEĞERLENDİRMEZ.
17 System.out.println("\n&& kısa devre (ilk false -> ikinci çalışmaz):");
18 boolean r1 = kontrol("A", false) && kontrol("B", true); // B çalışmaz
19 System.out.println(" sonuç: " + r1);
20
21 System.out.println("|| kısa devre (ilk true -> ikinci çalışmaz):");
22 boolean r2 = kontrol("C", true) || kontrol("D", true); // D çalışmaz
23 System.out.println(" sonuç: " + r2);
24 // Pratik fayda: null güvenliği -> (s != null && s.length() > 0)
25
26 // ÜÇLÜ (ternary) operatör: koşul ? doğruysa : yanlışsa (mini if-else ifadesi)
27 int yas = 20;
28 String durum = (yas >= 18) ? "yetişkin" : "reşit değil";
29 System.out.println("\nÜçlü: yas=" + yas + " -> " + durum);
30 int max = (7 > 3) ? 7 : 3;
31 System.out.println("max(7,3) = " + max);
32
33 // ÖNCELİK (precedence): * / %, + -'den ÖNCE; karşılaştırma mantıksaldan önce.
34 System.out.println("\n2 + 3 * 4 = " + (2 + 3 * 4) + " (* önce -> 14, parantezsiz)");
35 System.out.println("(2 + 3) * 4 = " + ((2 + 3) * 4) + " (parantez önceliği değiştirir)");
36
37 System.out.println("""
38
39 --- Mantıksal, kısa devre, üçlü, öncelik ---
40 Mantıksal: && (ve), || (veya), ! (değil).
41 KISA DEVRE: && ilk false -> ikinciyi atlar; || ilk true -> ikinciyi atlar.
42 Faydası: hem performans hem GÜVENLİK -> (s != null && s.isEmpty()) NPE'yi önler.
43 Üçlü (?:): 'kosul ? a : b' — bir DEĞER döndüren mini if-else.
44 Öncelik: * / % > + - > karşılaştırma > && > || ; ŞÜPHEDEYSEN PARANTEZ kullan (okunabilirlik).""");
45 }
46}