Eğitim Portalı/Java/Character ve Boolean Sınıfları
Java01-java/77-character-ve-boolean

Character ve Boolean Sınıfları

İki temel ilkel tipin — char ve boolean — wrapper sınıfları olan Character ve Boolean, küçük ama günlük kodda sık kullanılan yardımcılar sunar. Character, metin ayrıştırma ve doğrulamanın temelidir; Boolean ise mantık…

Character ve Boolean Sınıfları

İki temel ilkel tipin — char ve boolean — wrapper sınıfları olan Character ve Boolean, küçük ama günlük kodda sık kullanılan yardımcılar sunar. Character, metin ayrıştırma ve doğrulamanın temelidir; Boolean ise mantıksal değerlerle güvenli çalışmayı sağlar. İkisinin de kendine özgü tuzakları vardır.

Character: karakter sınıflandırma

Character'ın statik metotları bir karakterin ne olduğunu söyler veya onu dönüştürür:

Character.isDigit('7');         // rakam mı?
Character.isLetter('A');        // harf mi?
Character.isLetterOrDigit(c);
Character.isWhitespace(' ');    // boşluk mu?
Character.isUpperCase(c); Character.isLowerCase(c);
Character.toUpperCase(c); Character.toLowerCase(c);
Character.getNumericValue('9'); // -> 9 (sayısal değeri)

Bu metotlar; girdi doğrulama, ayrıştırıcı (parser) yazma ve metin analizi için temeldir. Örnek 1 (./Ornek1.java) bir metni karakter karakter analiz eder (harf/rakam/boşluk sayımı) ve char'ın aslında bir Unicode kodu olduğunu ('A' == 65) gösterir.

char ↔ int: Karakterler sayısal kodlardır. (int) 'A' → 65; (char) (c + 1) → sonraki karakter. Bu, karakter aritmetiğini (şifreleme, dönüşüm) mümkün kılar.

Boolean: mantıksal değerler

Boolean.parseBoolean("true");   // true
Boolean.parseBoolean("evet");   // false! (yalnızca "true" -> true)
Boolean.logicalAnd(a, b);
Boolean.logicalOr(a, b);
Boolean.logicalXor(a, b);

parseBoolean tuzağı: Yalnızca "true" (büyük/küçük harf duyarsız) true döndürür; başka her şey ("1", "evet", "yes", boş string) false olur. Kendi formatların varsa elle ayrıştır.

Üç-değerli mantık ve null tuzağı

İlkel boolean yalnızca true/false olabilir. Ama wrapper Boolean null olabilir — bu, "henüz bilinmiyor" gibi üç-değerli durumları modellemeye yarar (örn. veritabanından gelen, ayarlanmamış bir onay alanı):

Boolean onayli = null;   // bilinmiyor

Ancak buradaki tuzak ölümcüldür: null bir Booleanif/while koşulunda kullanmak, unboxing sırasında NullPointerException atar:

Boolean onayli = null;
if (onayli) { ... }      // NPE! (null.booleanValue())

Güvenli yollar:

if (Boolean.TRUE.equals(onayli)) { ... }   // null -> false, NPE yok
if (onayli != null && onayli) { ... }       // önce null kontrolü

Örnek 2 (./Ornek2.java) parseBoolean'ı, mantıksal metotları ve null Boolean tuzağını gösterir.

Özet

Character'ın karakter sınıflandırma/dönüştürme metotlarını ve metin analizindeki rolünü (Örnek 1); Boolean'ın parseBoolean tuzağını, mantıksal yardımcılarını ve özellikle null Boolean'ı koşulda kullanmanın NPE riskini (Örnek 2) öğrendik. Bununla Built-in Classes ve kalan Class References bölümü büyük ölçüde tamamlandı.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Character sınıfı — karakter sınıflandırma ve dönüşüm metotları.
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5    public static void main(String[] args) {
6        // Character'ın statik metotları bir karakteri SINIFLANDIRIR/DÖNÜŞTÜRÜR.
7        System.out.println("isDigit('7')      : " + Character.isDigit('7'));
8        System.out.println("isLetter('A')     : " + Character.isLetter('A'));
9        System.out.println("isLetterOrDigit('_'): " + Character.isLetterOrDigit('_'));
10        System.out.println("isWhitespace(' ') : " + Character.isWhitespace(' '));
11        System.out.println("isUpperCase('a')  : " + Character.isUpperCase('a'));
12        System.out.println("toUpperCase('a')  : " + Character.toUpperCase('a'));
13        System.out.println("getNumericValue('9'): " + Character.getNumericValue('9'));
14
15        // Gerçek kullanım: bir metni karakter karakter analiz et.
16        String metin = "Java 21, harika! (2026)";
17        int harf = 0, rakam = 0, bosluk = 0, diger = 0;
18        for (char c : metin.toCharArray()) {
19            if (Character.isLetter(c)) harf++;
20            else if (Character.isDigit(c)) rakam++;
21            else if (Character.isWhitespace(c)) bosluk++;
22            else diger++;
23        }
24        System.out.println("\n'" + metin + "' analizi:");
25        System.out.printf("  harf=%d, rakam=%d, boşluk=%d, diğer=%d%n", harf, rakam, bosluk, diger);
26
27        // char ↔ int: karakterler aslında sayısal kodlardır (Unicode).
28        char harfA = 'A';
29        System.out.println("\n'A' kodu: " + (int) harfA + ", 'A'+1 -> " + (char) (harfA + 1));
30
31        System.out.println("""
32
33                --- Character sınıfı ---
34                Bir karakteri sınıflandırır/dönüştürür: isDigit/isLetter/isLetterOrDigit/isWhitespace/
35                isUpperCase/isLowerCase, toUpperCase/toLowerCase, getNumericValue.
36                Girdi doğrulama, ayrıştırma (parser) ve metin analizi için temeldir.
37                char bir sayısal koddur (Unicode); int'e cast edilip aritmetik yapılabilir ('A'=65).""");
38    }
39}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Boolean sınıfı — ayrıştırma, mantıksal işlemler ve üç-değerli (null) durum.
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5    public static void main(String[] args) {
6        // parseBoolean: "true" (büyük/küçük fark etmez) -> true; DİĞER HER ŞEY -> false.
7        System.out.println("parseBoolean('true') : " + Boolean.parseBoolean("true"));
8        System.out.println("parseBoolean('TRUE') : " + Boolean.parseBoolean("TRUE"));
9        System.out.println("parseBoolean('evet') : " + Boolean.parseBoolean("evet")); // false!
10        System.out.println("parseBoolean('1')    : " + Boolean.parseBoolean("1"));    // false!
11
12        // Statik mantıksal işlemler (okunaklı):
13        System.out.println("\nlogicalAnd(true,false): " + Boolean.logicalAnd(true, false));
14        System.out.println("logicalOr(true,false) : " + Boolean.logicalOr(true, false));
15        System.out.println("logicalXor(true,true) : " + Boolean.logicalXor(true, true));
16
17        // ÜÇ DEĞERLİ MANTIK: Boolean (wrapper) null OLABİLİR -> true/false/null (örn. DB'den gelen).
18        Boolean onayli = null;   // "henüz bilinmiyor"
19        System.out.println("\nonayli = " + onayli);
20        // Tuzak: null Boolean'ı if'te kullanmak (unboxing) NPE atar.
21        try {
22            if (onayli) System.out.println("onaylı");  // null unboxing -> NPE
23        } catch (NullPointerException e) {
24            System.out.println("null Boolean if içinde -> NullPointerException!");
25        }
26        // Güvenli: önce null kontrolü veya Boolean.TRUE.equals
27        System.out.println("Güvenli kontrol: " + Boolean.TRUE.equals(onayli)); // false (NPE yok)
28
29        System.out.println("""
30
31                --- Boolean sınıfı ---
32                parseBoolean: yalnızca \"true\" (harf duyarsız) -> true; başka HER ŞEY false (\"1\", \"evet\" bile).
33                logicalAnd/Or/Xor: statik mantıksal işlemler (okunaklı yardımcılar).
34                Boolean WRAPPER null olabilir -> üç-değerli mantık (true/false/bilinmiyor).
35                TUZAK: null Boolean'ı if/while koşulunda kullanmak unboxing NPE'si atar.
36                  Güvenli yol: Boolean.TRUE.equals(x) veya önce null kontrolü.""");
37    }
38}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.