Java’da Primitive ve Non-Primitive (Reference) Değişkenler

Sercan Ozbek
5 min read5 days ago

--

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:

  1. Primitive (İlkel) Veri Tipleri
  2. 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

--

--

Sercan Ozbek
Sercan Ozbek

No responses yet