Java’nın Temelleri
2026
Programlama dünyasında veriler farklı türlerde karşımıza çıkar: tam sayılar, ondalıklı sayılar, metinler, mantıksal değerler… Çoğu zaman bu farklı türler arasında geçiş yapmamız gerekir. Örneğin, bir kullanıcıdan alınan metni sayıya çevirmek veya bir hesaplama sonucunu metin olarak göstermek. İşte bu noktada tip dönüşümü (type conversion) devreye girer.
Bu bölümde, Java’da veri tipleri arasındaki dönüşümleri, matematiksel operatörleri ve işlem önceliği kurallarını detaylı bir şekilde inceleyeceğiz. Amacımız, farklı veri türleriyle güvenli ve doğru bir şekilde çalışabilmenizi sağlamaktır.
Pedagojik Not: Bu bölümdeki örneklerin çoğu, Python ve Java arasındaki farkları vurgulayacak şekilde tasarlanmıştır. Java, statik tipli bir dil olduğu için tip dönüşümleri Python’a göre daha katı kurallara tabidir.
Java’da temel (primitive) veri tipleri şunlardır:
| Tip | Boyut | Açıklama | Örnek |
|---|---|---|---|
byte |
8 bit | Küçük tam sayılar | -128 ile 127 |
short |
16 bit | Orta boy tam sayılar | -32,768 ile 32,767 |
int |
32 bit | Standart tam sayı | -2³¹ ile 2³¹-1 |
long |
64 bit | Büyük tam sayılar | -2⁶³ ile 2⁶³-1 |
float |
32 bit | Tek duyarlıklı ondalık | ±3.4E-38 ile ±3.4E+38 |
double |
64 bit | Çift duyarlıklı ondalık | ±1.7E-308 ile ±1.7E+308 |
char |
16 bit | Tek karakter | ‘A’, ‘5’, ‘’ |
boolean |
1 bit | Mantıksal değer | true, false |
Metinsel veriler için String sınıfı kullanılır (primitive tip değildir).
Java’da tip dönüşümü iki şekilde gerçekleşir:
Küçük kapasiteli bir tip, daha büyük kapasiteli bir tipe otomatik olarak dönüştürülür. Bu işlemde veri kaybı olmaz.
Dönüşüm zinciri: byte → short → int → long → float → double
int sayi = 100;
long buyukSayi = sayi; // Otomatik dönüşüm
double ondalik = sayi; // Otomatik dönüşümBüyük kapasiteli bir tip, daha küçük kapasiteli bir tipe dönüştürülürken veri kaybı riski olduğu için açık dönüşüm (cast) operatörü kullanılmalıdır.
double ondalik = 9.78;
int tamSayi = (int) ondalik; // Açık dönüşüm, sonuç: 9Uyarı: Açık dönüşümlerde veri kaybı yaşanabilir. Ondalıklı kısım atılır (truncation), büyük sayılar taşabilir (overflow).
Java’da tip dönüşümleri için çeşitli sınıf metotları bulunur:
Integer.parseInt(String) - Metni int’e çevirirDouble.parseDouble(String) - Metni double’a çevirirString.valueOf(sayi) - Sayıyı metne çevirirInteger.valueOf(String) - Metni Integer nesnesine çevirirpublic class TipDonusumOrnekleri {
public static void main(String[] args) {
// Metinden sayıya dönüşüm
String metinSayi = "123";
int sayi = Integer.parseInt(metinSayi);
System.out.println("Metinden sayıya: " + sayi);
// Sayıdan metne dönüşüm
double pi = 3.14159;
String piMetin = String.valueOf(pi);
System.out.println("Sayıdan metne: " + piMetin);
// Farklı tabanlardan dönüşüm
String binary = "1010";
int binaryDeger = Integer.parseInt(binary, 2);
System.out.println("İkili taban: " + binary + " -> " + binaryDeger);
String hex = "FF";
int hexDeger = Integer.parseInt(hex, 16);
System.out.println("Onaltılı taban: " + hex + " -> " + hexDeger);
}
}Çıktı:
Metinden sayıya: 123
Sayıdan metne: 3.14159
İkili taban: 1010 -> 10
Onaltılı taban: FF -> 255
int tamSayi = 42;
double ondalik = tamSayi; // Otomatik, veri kaybı yok
System.out.println(ondalik); // 42.0double ondalik = 3.14159;
int tamSayi = (int) ondalik; // Açık dönüşüm
System.out.println(tamSayi); // 3 (ondalık kısım atılır)Java’da yuvarlama için Math sınıfı kullanılır:
double sayi = 3.7;
long asagiYuvarla = (long) Math.floor(sayi); // 3
long yukariYuvarla = (long) Math.ceil(sayi); // 4
long enYakin = Math.round(sayi); // 4İpucu:
Math.round()metodu, .5 ve üzerini yukarı yuvarlar. Bu, bankacılık uygulamaları için uygun olmayabilir.
String dogruMetin = "123";
int dogruSayi = Integer.parseInt(dogruMetin); // Başarılı
String hataliMetin = "abc";
// int hataliSayi = Integer.parseInt(hataliMetin); // NumberFormatException!public static int guvenliDonusum(String metin) {
try {
return Integer.parseInt(metin);
} catch (NumberFormatException e) {
System.out.println("Hata: Geçersiz sayı formatı!");
return 0; // Varsayılan değer
}
}Java’da boolean tipleri doğrudan sayısal tiplere dönüştürülemez. Ancak mantıksal işlemlerde kullanılabilir:
boolean dogru = true;
boolean yanlis = false;
// Java'da boolean -> int otomatik dönüşümü yoktur!
// int sayi = dogru; // HATA!
// Mantıksal değerleri sayısal olarak kullanma
int sonuc = dogru ? 1 : 0; // Ternary operatörü ileÖnemli Not: Python’dan farklı olarak, Java’da
truedeğeri1’e,falsedeğeri0’a otomatik olarak dönüşmez. Bu, tip güvenliği için bilinçli bir tasarım tercihidir.
public class SayisalDonusumUygulamalari {
public static void main(String[] args) {
// 1. Ondalıklı sayıdan tam sayıya (veri kaybı)
double maas = 5750.75;
int maasTam = (int) maas;
System.out.println("Maaş (double): " + maas);
System.out.println("Maaş (int): " + maasTam + " (kayıp: " + (maas - maasTam) + ")");
// 2. Yuvarlama örnekleri
double[] degerler = {2.3, 2.7, 3.5, 4.5};
for (double d : degerler) {
System.out.printf("%.1f -> floor: %.0f, ceil: %.0f, round: %d%n",
d, Math.floor(d), Math.ceil(d), Math.round(d));
}
// 3. Metin dönüşümü ve hata yönetimi
String[] testMetinler = {"123", "45.67", "abc", "0xFF"};
for (String m : testMetinler) {
try {
if (m.contains(".")) {
double d = Double.parseDouble(m);
System.out.println(m + " -> " + d);
} else {
int i = Integer.parseInt(m);
System.out.println(m + " -> " + i);
}
} catch (NumberFormatException e) {
System.out.println(m + " -> HATA: Geçersiz format!");
}
}
}
}Çıktı:
Maaş (double): 5750.75
Maaş (int): 5750 (kayıp: 0.75)
2.3 -> floor: 2, ceil: 3, round: 2
2.7 -> floor: 2, ceil: 3, round: 3
3.5 -> floor: 3, ceil: 4, round: 4
4.5 -> floor: 4, ceil: 5, round: 5
123 -> 123
45.67 -> 45.67
abc -> HATA: Geçersiz format!
0xFF -> HATA: Geçersiz format!
Java’da temel aritmetik operatörler şunlardır:
| Operatör | İşlem | Örnek | Sonuç |
|---|---|---|---|
+ |
Toplama | 5 + 3 |
8 |
- |
Çıkarma | 5 - 3 |
2 |
* |
Çarpma | 5 * 3 |
15 |
/ |
Bölme | 5 / 3 |
1 (int) / 1.666... (double) |
% |
Mod (Kalan) | 5 % 3 |
2 |
++ |
Artırma | ++x veya x++ |
x+1 |
-- |
Azaltma | --x veya x-- |
x-1 |
Java’da bölme işlemi, operandların tiplerine göre farklı sonuç verir:
int a = 10;
int b = 3;
int tamBolme = a / b; // 3 (int / int = int)
double ondalikBolme = (double) a / b; // 3.333... (double / int = double)Dikkat: İki tam sayının bölümü her zaman tam sayıdır! Ondalıklı sonuç istiyorsanız en az bir operandı double’a dönüştürmelisiniz.
Mod operatörü, bölme işleminden kalanı verir:
System.out.println(10 % 3); // 1
System.out.println(15 % 5); // 0 (tam bölünür)
System.out.println(7 % 10); // 7 (bölünemez)
System.out.println(-7 % 3); // -1 (negatif sayılarda dikkat!)Pratik Kullanım: Mod operatörü, bir sayının çift/tek olduğunu kontrol etmek için idealdir:
sayi % 2 == 0→ çift,sayi % 2 == 1→ tek.
Kısa yazım şekilleri:
int x = 10;
x += 5; // x = x + 5 → 15
x -= 3; // x = x - 3 → 12
x *= 2; // x = x * 2 → 24
x /= 4; // x = x / 4 → 6
x %= 4; // x = x % 4 → 2Math.sqrt(16); // 4.0 (karekök)
Math.pow(2, 3); // 8.0 (üs alma)
Math.abs(-5); // 5 (mutlak değer)
Math.max(10, 20); // 20 (büyük olan)
Math.min(10, 20); // 10 (küçük olan)
Math.random(); // 0.0 ile 1.0 arasında rastgele sayı// Math.pow ile üs alma
double kare = Math.pow(5, 2); // 25.0
double kup = Math.pow(5, 3); // 125.0
double kok = Math.pow(16, 0.5); // 4.0
// Math.sqrt ile karekök
double kareKok = Math.sqrt(25); // 5.0String selam = "Merhaba, ";
String isim = "Ahmet";
String mesaj = selam + isim; // "Merhaba, Ahmet"
// Sayı + String = String
String yasMetin = "Yaş: " + 25; // "Yaş: 25"Java’da String’ler için * operatörü yoktur. Bunun