Java’da Primitive ve Non-Primitive (Reference) Değişkenler
Bu yazımda Primitive ve Non-Primitive (Reference) değişkenlerden, aralarındaki farklardan ve Java’da ki kullanım örneklerinden bahsedeceğim.
Java’da Primitive ve Non-Primitive (Reference) Veri Tipleri
Veri tipleri ikiye ayrılır:
- Primitive (İlkel) Veri Tipleri
- Non-Primitive (Reference) Veri Tipleri
1. Primitive Veri Tipleri
Primitive veri tipleri, programlama dillerinde en temel veri türleridir ve doğrudan bellekte saklanarak yüksek performans sağlarlar. Java gibi dillerde kullanılan bu veri tipleri, verinin doğrudan değerini içerir ve herhangi bir nesneye veya referansa bağlı değildir. Bu nedenle, bellek yönetimi açısından daha verimli çalışırlar ve referans türlerine kıyasla daha az bellek tüketirler.
Primitive veri tipleri genellikle sayısal, karakter ve mantıksal türlerde olabilir. Sayısal veri tipleri tam sayı ve ondalıklı sayı olarak ikiye ayrılırken, karakter tipi tek bir Unicode karakter saklamak için kullanılır. Mantıksal veri tipi ise yalnızca true veya false değerlerini alabilir.
Bu veri tipleri, genellikle küçük ve sabit bir bellek alanı kapladıkları için performans açısından avantajlıdır. Ancak, nesne yönelimli programlamada bazı durumlarda referans tipleriyle çalışmak daha esnek çözümler sunabilir. Örneğin, primitive türleri sarmalayan wrapper sınıfları sayesinde, bu veri tipleri nesne gibi davranabilir ve koleksiyonlarla kullanılabilir.
Yukarıdaki tabloda görüldüğü üzere birçok primitive tipinde Java değişkeni vardır ve bunların her birinin kendine göre özelliği vardır.
Örneğin boolean değişkeni ile true veya false değeri tutarken, int ile sayısal değerler tutarız. Her bir değişkenin alacağı maksimum ve minimum değerleri vardır. Her birinin bellekte kapladığı boyut vardır.
public class PrimitiveExample {
public static void main(String[] args) {
byte b = 127; // En fazla 127 alabilir
short s = 32000; // -32,768 ile 32,767 arasında
int i = 2147483647; // -2,147,483,648 ile 2,147,483,647 arasında
long l = 9223372036854775807L; // Sonuna 'L' eklenmeli
float f = 3.14f; // Sonuna 'f' eklenmeli
double d = 3.1415926535; // Ondalıklı sayı
char c = 'E'; // Tek karakter tutar
boolean bool = true; // true veya false olabilir
// Hatalı satır (byte veri tipi -128 ile 127 arasında olmalı)
byte wrongByte = 150; // ❌ Derleme hatası!
System.out.println("Byte: " + b);
System.out.println("Short: " + s);
System.out.println("Int: " + i);
System.out.println("Long: " + l);
System.out.println("Float: " + f);
System.out.println("Double: " + d);
System.out.println("Char: " + c);
System.out.println("Boolean: " + bool);
}
}
byte wrongByte = 150→ Hata verir, çünkü byte veri tipi -128 ile 127 arasında değer alabilir. 150, bu aralığın dışındadır.
Wrapper Class
Wrapper Class, Java’daki primitive veri tiplerini nesne olarak kullanmamızı sağlayan sınıflardır.
public class WrapperExample {
public static void main(String[] args) {
int primitiveInt = 10; // Primitive
Integer wrapperInt = 10; // Non-primitive (Wrapper Class)
double primitiveDouble = 5.5; // Primitive
Double wrapperDouble = 5.5; // Non-primitive
// Wrapper class'lar null olabilir, primitive'ler olamaz!
Integer nullableInt = null; // ✅ Geçerli
// int invalidPrimitive = null; // ❌ Hata verir!
// Wrapper class ile metin dönüşümleri yapabiliriz
int parsedInt = Integer.parseInt("123");
System.out.println("Parsed int: " + parsedInt);
}
}
✅ Heap bellekte saklanır (referans tiptir).
✅ Metin dönüşümleri yapabiliriz (Integer.parseInt(“123”)) .
✅ Null atanabilir, ancak primitive veri tipleri null olamaz.
✅ Otomatik dönüşüm (Autoboxing & Unboxing) destekler.
2.Non-Primitive(Reference)
Non-Primitive (reference) veri tipleri, hafızada referans (adres) tutan veri tipleridir. Primitive veri tiplerinden farklı olarak, nesnelerle çalışırlar ve daha fazla bellek kullanabilirler.
Class
Class, nesne yönelimli programlamanın temel yapı taşıdır. Bir sınıf, veri (field, özellik) ve davranışları (method, fonksiyon) tanımlayan bir şablondur.
class Car {
String model;
Car(String model) { this.model = model; }
}
Array
Array, aynı veri tipindeki birden fazla öğeyi saklayan sabit boyutlu bir veri yapısıdır.
int[] nums = {1, 2, 3};
Interface
Interface, bir sınıfın uygulamak zorunda olduğu metotları tanımlayan bir yapıdır. Soyut metotlar içerir ve çoklu kalıtımı desteklemek için kullanılır.
interface Animal { void sound(); }
Enum
Enum, sabit değerlerin tanımlandığı özel bir veri tipidir.
enum Day { MONDAY, TUESDAY, WEDNESDAY }
String
String, karakter dizilerini saklayan özel bir sınıftır ve değiştirilemez (imutable) bir yapıya sahiptir.
String str = "Hello";
Object
Object (nesne), bir sınıfın somut bir örneğidir. Sınıflar şablondur, nesneler ise o şablondan üretilen gerçek varlıklardır.
class Araba {
String marka;
int hiz;
void hizlan(int artis) {
hiz += artis;
System.out.println("Yeni hız: " + hiz);
}
}
public class Main {
public static void main(String[] args) {
Araba araba1 = new Araba(); // Nesne oluşturma
araba1.marka = "Toyota";
araba1.hiz = 50;
araba1.hizlan(20); // Çıktı: Yeni hız: 70
}
}
Collection
Collection, birden fazla veriyi saklamak ve yönetmek için kullanılan bir çerçevedir. List, Set, Queue ve Map gibi veri yapıları içerir.
List<String> list = Arrays.asList("A", "B", "C");
Sonuc
Sonuç olarak, Java’da Primitive ve Non-Primitive değişkenler arasında önemli farklar vardır. Primitive tipler bellek açısından daha verimlidir ve doğrudan değerleri saklarken, Non-Primitive tipler nesne tabanlı olup heap bellekte referansları tutar. Hız ve bellek kullanımı açısından primitive tipler avantajlıdır, ancak esneklik ve fonksiyonellik açısından non-primitive tipler daha güçlüdür.
Tüm yazılarımı https://sercanozbek.medium.com/ adresinden inceleyebilirsiniz.
Bana ulaşmak için: LinkedIn