Genişletme ve Daraltma Dönüşümleri
Otomatik genişletme dönüşümlerini ve açık daraltma dönüştürmelerini güvenli biçimde gerçekleştirmeyi öğrenin.
Genişletme ve Daraltma Dönüşümleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Java'da Tür Dönüşümleri
Java, uyumlu türler arasında değerleri dönüştürmenize olanak tanır. İki yön vardır:
- Genişletme — daha büyük bir türe dönüştürme (güvenli, otomatik)
- Daraltma — daha küçük bir türe dönüştürme (riskli, açık tür dönüştürme gerektirir)
Genişletme Dönüşümü
Genişletme, bir değeri daha büyük ve uyumlu bir türe atadığınızda otomatik olarak gerçekleşir. Hedef tür, kaynağın tüm değerlerini gösterebildiği için veri kaybı olmaz.
Genişletme sırası: byte → short → int → long → float → double
byte b = 42;
short s = b; // byte → short (widening)
int i = s; // short → int (widening)
long l = i; // int → long (widening)
float f = l; // long → float (widening)
double d = f; // float → double (widening)
System.out.println(d); // 42.0Daraltma Dönüşümü
Daraltma, tür dönüştürme işleci (type) kullanılarak açıkça yapılmalıdır. Değer hedef türe sığmazsa kesilebilir veya bozulabilir.
double price = 99.99;
int wholePart = (int) price; // narrows — decimal truncated
System.out.println(wholePart); // 99 (not rounded!)
long bigNum = 130L;
byte small = (byte) bigNum; // 130 overflows byte (max 127)
System.out.println(small); // -126 (unexpected!)Daraltma Sırasında Taşma
Daraltma sırasında bir değer taştığında Java, istisna fırlatmak yerine modüler aritmetik kullanarak değeri döngüsel olarak başa sarar. Buna karşı korumayı kendiniz sağlamalısınız.
int million = 1_000_000;
byte narrowed = (byte) million;
System.out.println(narrowed); // 64 (wraps around)
// Safe narrowing: check bounds first
if (million >= Byte.MIN_VALUE && million <= Byte.MAX_VALUE) {
byte safe = (byte) million;
} else {
System.out.println("Value doesn't fit in byte!");
}char ve int Dönüşümleri
char, bir Unicode kod noktasını temsil eden 16 bitlik işaretsiz bir tam sayıdır. Otomatik olarak int türüne genişler, ancak int türünden yeniden char türüne dönüştürülürken açık tür dönüştürme yapılmalıdır.
char letter = 'A';
int code = letter; // widening: char → int
System.out.println(code); // 65
int nextCode = code + 1;
char nextLetter = (char) nextCode; // narrowing: int → char
System.out.println(nextLetter); // B
// Useful for Caesar cipher shifts
char shifted = (char) ('a' + 3);
System.out.println(shifted); // dKayan Noktalı Sayıdan Tam Sayıya Kesme
Kayan noktalı bir sayıyı tam sayıya dönüştürmek, sayıyı yuvarlamaz; sıfıra doğru keser. Yuvarlama gerekiyorsa Math.round() kullanın.
double pos = 3.9;
double neg = -3.9;
System.out.println((int) pos); // 3 (not 4)
System.out.println((int) neg); // -3 (not -4)
System.out.println(Math.round(pos)); // 4
System.out.println(Math.round(neg)); // -4String'den Sayıya Dönüştürmeler
Bir String değerini sayıya ayrıştırmak için tür dönüştürme değil, sarmalayıcı sınıf yöntemleri kullanılır. Sayısal olmayan bir dize geçirmek NumberFormatException oluşturur.
String input = "42";
int parsed = Integer.parseInt(input);
double parsedD = Double.parseDouble("3.14");
System.out.println(parsed + 1); // 43
System.out.println(parsedD); // 3.14
try {
int bad = Integer.parseInt("abc");
} catch (NumberFormatException e) {
System.out.println("Not a valid number!");
}Sayıdan String'e Dönüştürmeler
Bir sayıyı String'e String.valueOf(), Integer.toString() veya "" ile dize birleştirme kullanarak dönüştürebilirsiniz.
int score = 95;
String s1 = String.valueOf(score); // "95"
String s2 = Integer.toString(score); // "95"
String s3 = score + ""; // "95" (concat trick)
System.out.println(s1.getClass().getSimpleName()); // String
// Converting to different bases
System.out.println(Integer.toBinaryString(42)); // 101010
System.out.println(Integer.toHexString(255)); // ffİfadelerde Tür Yükseltme
Aritmetik ifadelerde Java, işlenenleri otomatik olarak yükseltir:
byte,short,char→ işlemden önceinttürüne yükseltilir- İşlenenlerden biri
longise sonuçlongolur - İşlenenlerden biri
floatveyadoubleise sonuç daha geniş türle aynı olur
byte x = 10;
byte y = 20;
// byte z = x + y; // compile error! sum is promoted to int
int z = x + y; // correct
long a = 100L;
float b = 2.5f;
double result = a * b; // long * float → double
System.out.println(result); // 250.0Bileşik Atama Operatörleri
+=, -= ve *= gibi bileşik operatörler örtük bir daraltma dönüştürmesi içerir. Bu sayede byte ve short değişkenleriyle daha kısa kod yazabilirsiniz.
byte count = 100;
// count = count + 1; // compile error — int result needs cast
count += 1; // OK — compound op casts automatically
System.out.println(count); // 101
short total = 1000;
total *= 2; // implicit narrow cast included
System.out.println(total); // 2000Uygulama: Güvenli Tamsayı Ayrıştırma
Gerçek hayatta kullanılan bir yaklaşım: kullanıcı girdisini güvenli biçimde ayrıştırın, aralığını doğrulayın ve gereken tam türe daraltın.
public static byte parseAsByte(String input) {
int value = Integer.parseInt(input); // can throw NumberFormatException
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
throw new IllegalArgumentException(
"Value " + value + " out of byte range");
}
return (byte) value;
}
// Usage
System.out.println(parseAsByte("100")); // 100
System.out.println(parseAsByte("200")); // IllegalArgumentExceptionHızlı Kontrol
Aşağıdaki kodun çıktısı nedir?
double d = -7.8; int i = (int) d; System.out.println(i);
Özet: Tür Genişletme ve Daraltma
Temel çıkarımlar:
- Genişletme otomatiktir ve güvenlidir: byte→short→int→long→float→double
- Daraltma açık bir dönüştürme gerektirir ve veri kaybına veya taşmaya neden olabilir
- char, int türüne genişletilir; int, bir dönüştürmeyle yeniden char türüne daraltılabilir
- Kayan noktalı sayıdan int türüne dönüştürme sıfıra doğru kesme yapar, yuvarlama yapmaz
- String değerlerini sayılara dönüştürmek için Integer.parseInt/Double.parseDouble kullanın
- Bileşik operatörler (+=, *=) örtük daraltma dönüştürmeleri içerir
Sıkça Sorulan Sorular
“Genişletme ve Daraltma Dönüşümleri” dersi ücretsiz mi?
Evet — “Genişletme ve Daraltma Dönüşümleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Genişletme ve Daraltma Dönüşümleri” dersinde ne öğreneceğim?
Otomatik genişletme dönüşümlerini ve açık daraltma dönüştürmelerini güvenli biçimde gerçekleştirmeyi öğrenin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Genişletme ve Daraltma Dönüşümleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İlkel Türler ve Başvuru Türleri
- Genişletme ve Daraltma Dönüşümleri
- instanceof İşleci
- Uygulamada Tür Dönüştürme