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);
parseBooleantuzağı: Yalnızca"true"(büyük/küçük harf duyarsız)truedöndürür; başka her şey ("1","evet","yes", boş string)falseolur. 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 Boolean'ı if/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ılabilir1// 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}Ornek2
çalıştırılabilir1// 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}