crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Java'da Tip Dönüşümleri: Widening vs Narrowing
1. Implicit Casting (Widening - Genişleten Dönüşüm)
Bu dönüşüm, küçük bir veri tipinin otomatik olarak daha büyük bir veri tipine atanmasıdır. Java bunu güvenli bulur çünkü veri kaybı ihtimali yoktur (örneğin, küçük bir bardağın içindeki suyu büyük bir sürahiye boşaltmak gibi).
Dönüşüm Sırası: byte → short → char → int → long → float → double
Java:
int tamSayi = 100;
double ondalikSayi = tamSayi; // Otomatik dönüşüm (Implicit)
System.out.println(tamSayi); // Çıktı: 100
System.out.println(ondalikSayi); // Çıktı: 100.0
2. Explicit Casting (Narrowing - Daraltan Dönüşüm)
Daha büyük bir veri tipini daha küçük bir tipe elle (manuel) dönüştürme işlemidir. Java bunu otomatik yapmaz çünkü veri kaybı riski vardır (örneğin, bir sürahi dolusu suyu küçük bir bardağa sığdırmaya çalışmak). Geliştirici, "Veri kaybı olabileceğini biliyorum, sorumluluk bende" demek için parantez içinde hedef tipi belirtmelidir.
Java:
double maas = 15500.85;
int yuvarlanmisMaas = (int) maas; // Manuel dönüşüm (Explicit)
System.out.println(maas); // Çıktı: 15500.85
System.out.println(yuvarlanmisMaas); // Çıktı: 15500 (Ondalık kısım atıldı!)
3. Kritik Noktalar ve Riskler
Veri Kaybı (Data Loss)
Explicit casting yaparken sayının boyutu hedef tipin sınırlarını aşarsa, sayı tamamen anlamsız bir değere dönüşebilir (overflow).
Java:
int sayi = 130;
byte kucukSayi = (byte) sayi;
System.out.println(kucukSayi); // Çıktı: -126 (Byte sınırı -128 ile 127 arasındadır!)
Karakter Dönüşümleri
char tipi aslında arka planda bir sayısal değer (ASCII/Unicode) tuttuğu için sayılarla dönüşüme girebilir.
Java:
char harf = 'A';
int asciiKod = harf; // Implicit: 65
char yeniHarf = (char) (asciiKod + 1); // Explicit: 'B'
Karşılaştırma Tablosu
| Özellik | Implicit Casting | Explicit Casting |
|---|---|---|
| Diğer Adı | Widening (Genişletme) | Narrowing (Daraltma) |
| Dönüşüm Yönü | Küçük Tip -> Büyük Tip | Büyük Tip -> Küçük Tip |
| Sorumluluk | Java (Otomatik) | Geliştirici (Manuel) |
| Veri Kaybı | Yok | Olabilir (Ondalık silinmesi vb.) |
Sonuç
Tip dönüşümleri, özellikle kullanıcıdan veri alırken veya matematiksel hesaplamalar yaparken (örneğin iki int sayıyı bölüp double sonuç almak gibi) karşınıza çıkar. Implicit dönüşümlere güvenebiliriz ancak Explicit dönüşümlerde her zaman "Burada veri kaybediyor muyum?" sorusunu sormak gerekir.