Değişkenler ve Tip Dönüşümleri (Type Casting): Explicit vs Implicit

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​


ÖzellikImplicit CastingExplicit Casting
Diğer AdıWidening (Genişletme)Narrowing (Daraltma)
Dönüşüm YönüKüçük Tip -> Büyük TipBüyük Tip -> Küçük Tip
SorumlulukJava (Otomatik)Geliştirici (Manuel)
Veri KaybıYokOlabilir (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.
 
Geri
Üst