{"id":37419,"date":"2026-01-04T00:40:42","date_gmt":"2026-01-03T21:40:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37419"},"modified":"2026-01-04T00:40:42","modified_gmt":"2026-01-03T21:40:42","slug":"javada-degistirilemez-immutable-siniflar-olusturma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/","title":{"rendered":"Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi<\/h2>\n<p>Java programlamada &#8220;de\u011fi\u015ftirilemez&#8221; (immutable) kavram\u0131, bir nesnenin olu\u015fturulduktan sonra durumunun (state) asla de\u011fi\u015ftirilemeyece\u011fi anlam\u0131na gelir. Bir kez olu\u015fturulan de\u011fi\u015ftirilemez bir nesne, ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca ayn\u0131 de\u011ferleri korur. Bu \u00f6zellik, \u00f6zellikle \u00e7oklu i\u015f par\u00e7ac\u0131kl\u0131 (multi-threaded) ortamlarda ve karma\u015f\u0131k sistemlerde yaz\u0131l\u0131m geli\u015ftirmenin g\u00fcvenli\u011fini, basitli\u011fini ve performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu makalede, Java&#8217;da de\u011fi\u015ftirilemez s\u0131n\u0131flar\u0131n nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131, bu s\u0131n\u0131flar\u0131n temel kurallar\u0131n\u0131, avantajlar\u0131n\u0131, dezavantajlar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya \u00f6rneklerini detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>De\u011fi\u015ftirilemezlik (Immutability) Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>De\u011fi\u015ftirilemezlik, nesne y\u00f6nelimli programlaman\u0131n temel prensiplerinden biridir ve bir nesnenin olu\u015fturulduktan sonra dahili durumunun de\u011fi\u015ftirilemez olmas\u0131n\u0131 garanti eder. Bunun tam tersi olan de\u011fi\u015ftirilebilir (mutable) nesneler ise olu\u015fturulduktan sonra durumlar\u0131 de\u011fi\u015ftirilebilir. Java&#8217;daki <code>String<\/code> s\u0131n\u0131f\u0131, de\u011fi\u015ftirilemezli\u011fin en bilinen ve en s\u0131k kullan\u0131lan \u00f6rneklerinden biridir. Bir <code>String<\/code> nesnesi olu\u015fturulduktan sonra i\u00e7eri\u011fi de\u011fi\u015ftirilemez; <code>concat()<\/code> gibi metotlar asl\u0131nda yeni bir <code>String<\/code> nesnesi d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>De\u011fi\u015ftirilemez s\u0131n\u0131flar, yaz\u0131l\u0131m geli\u015ftirmede bir\u00e7ok \u00f6nemli avantaj sunar:<\/p>\n<p>*   <strong>\u0130\u015f Par\u00e7ac\u0131\u011f\u0131 G\u00fcvenli\u011fi (Thread Safety):<\/strong> De\u011fi\u015ftirilemez nesneler, birden fazla i\u015f par\u00e7ac\u0131\u011f\u0131 taraf\u0131ndan g\u00fcvenle payla\u015f\u0131labilir \u00e7\u00fcnk\u00fc durumlar\u0131 asla de\u011fi\u015fmez. Bu, senkronizasyon mekanizmalar\u0131na (kilitler vb.) olan ihtiyac\u0131 ortadan kald\u0131r\u0131r veya \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r, bu da e\u015fzamanl\u0131 programlamay\u0131 basitle\u015ftirir ve hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<br \/>\n*   <strong>Basitlik ve Anla\u015f\u0131labilirlik:<\/strong> Bir nesnenin durumunun de\u011fi\u015fmeyece\u011fini bilmek, kodun okunabilirli\u011fini ve anla\u015f\u0131labilirli\u011fini art\u0131r\u0131r. Nesnelerin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca neye benzeyece\u011fini tahmin etmek kolayla\u015f\u0131r.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> De\u011fi\u015ftirilemez nesneler, d\u0131\u015far\u0131dan veya k\u00f6t\u00fc niyetli kod taraf\u0131ndan durumlar\u0131n\u0131n de\u011fi\u015ftirilmesi riskini ortadan kald\u0131r\u0131r. Bu, \u00f6zellikle hassas verilerle \u00e7al\u0131\u015f\u0131rken kritik bir avantajd\u0131r.<br \/>\n*   <strong>\u00d6nbellekleme (Caching):<\/strong> De\u011fi\u015ftirilemez nesnelerin hash kodlar\u0131, bir kez hesapland\u0131ktan sonra de\u011fi\u015fmeyece\u011fi i\u00e7in \u00f6nbelle\u011fe al\u0131nabilir. Bu, <code>HashMap<\/code> veya <code>HashSet<\/code> gibi koleksiyonlarda anahtar olarak kullan\u0131ld\u0131klar\u0131nda performans art\u0131\u015f\u0131 sa\u011flar.<br \/>\n*   <strong>Hata Ay\u0131klama Kolayl\u0131\u011f\u0131:<\/strong> Bir nesnenin durumu de\u011fi\u015fmedi\u011fi i\u00e7in, beklenmedik davran\u0131\u015flar\u0131n veya hatalar\u0131n kayna\u011f\u0131n\u0131 bulmak genellikle daha kolayd\u0131r.<\/p>\n<p>Bu avantajlar g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, m\u00fcmk\u00fcn oldu\u011funca de\u011fi\u015ftirilemez s\u0131n\u0131flar kullanmak, daha sa\u011flam, g\u00fcvenli ve s\u00fcrd\u00fcr\u00fclebilir Java uygulamalar\u0131 olu\u015fturmak i\u00e7in iyi bir pratiktir.<\/p>\n<h3>De\u011fi\u015ftirilemez S\u0131n\u0131f Olu\u015fturman\u0131n Temel Kurallar\u0131<\/h3>\n<p>Java&#8217;da tam anlam\u0131yla de\u011fi\u015ftirilemez bir s\u0131n\u0131f olu\u015fturmak i\u00e7in belirli kurallara uymak gereklidir. Bu kurallar, nesnenin durumunun olu\u015fturulduktan sonra herhangi bir \u015fekilde de\u011fi\u015ftirilmesini engellemek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h4>1. S\u0131n\u0131f\u0131 <code>final<\/code> Olarak Tan\u0131mlay\u0131n<\/h4>\n<p>Bir s\u0131n\u0131f\u0131 <code>final<\/code> olarak tan\u0131mlamak, o s\u0131n\u0131ftan ba\u015fka s\u0131n\u0131flar\u0131n t\u00fcretilmesini (miras almas\u0131n\u0131) engeller. E\u011fer s\u0131n\u0131f <code>final<\/code> olmazsa, k\u00f6t\u00fc niyetli bir alt s\u0131n\u0131f, de\u011fi\u015ftirilemez olarak tasarlad\u0131\u011f\u0131n\u0131z s\u0131n\u0131f\u0131n davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirebilir veya de\u011fi\u015ftirilebilir alanlar ekleyerek de\u011fi\u015ftirilemezlik prensibini bozabilir.<\/p>\n<pre><code class=\"language-java\">public final class ImmutableClass {\n    \/\/ ... s\u0131n\u0131f i\u00e7eri\u011fi ...\n}<\/code><\/pre>\n<h4>2. T\u00fcm Alanlar\u0131 (<code>Instance Variables<\/code>) <code>private<\/code> ve <code>final<\/code> Olarak Tan\u0131mlay\u0131n<\/h4>\n<p>*   <strong><code>private<\/code>:<\/strong> Alanlar\u0131 <code>private<\/code> olarak tan\u0131mlamak, d\u0131\u015far\u0131dan do\u011frudan eri\u015fimi ve dolay\u0131s\u0131yla do\u011frudan de\u011fi\u015fikli\u011fi engeller. Bu, kaps\u00fclleme prensibinin temelidir.<br \/>\n*   <strong><code>final<\/code>:<\/strong> Alanlar\u0131 <code>final<\/code> olarak tan\u0131mlamak, bu alanlara yaln\u0131zca kurucu metot (constructor) s\u0131ras\u0131nda bir kez de\u011fer atanabilece\u011fini garanti eder. Atama yap\u0131ld\u0131ktan sonra bu alanlar\u0131n referanslar\u0131 veya de\u011ferleri de\u011fi\u015ftirilemez.<\/p>\n<pre><code class=\"language-java\">public final class ImmutableClass {\n    private final String name;\n    private final int id;\n    \/\/ ... di\u011fer alanlar ...\n}<\/code><\/pre>\n<h4>3. Kurucu Metot (Constructor) Kullanarak T\u00fcm Alanlar\u0131 Ba\u015flat\u0131n<\/h4>\n<p>T\u00fcm <code>final<\/code> alanlar\u0131n kurucu metot i\u00e7inde ba\u015flat\u0131lmas\u0131 zorunludur. Bu, nesnenin ilk olu\u015fturuldu\u011fu anda t\u00fcm durumunun belirlendi\u011fi anlam\u0131na gelir. Kurucu metot, nesnenin durumunu ayarlamak i\u00e7in tek yoldur.<\/p>\n<pre><code class=\"language-java\">public final class ImmutableClass {\n    private final String name;\n    private final int id;\n\n    public ImmutableClass(String name, int id) {\n        this.name = name;\n        this.id = id;\n    }\n    \/\/ ...\n}<\/code><\/pre>\n<h4>4. Alanlar \u0130\u00e7in Sadece Getter Metotlar\u0131 Sa\u011flay\u0131n (Setter Metotlar\u0131 OLMASIN)<\/h4>\n<p>De\u011fi\u015ftirilemez bir s\u0131n\u0131f\u0131n temel amac\u0131, durumunun de\u011fi\u015fmesini engellemektir. Bu nedenle, nesnenin durumunu de\u011fi\u015ftirebilecek hi\u00e7bir <code>setter<\/code> metodu veya benzeri bir metot (\u00f6rne\u011fin, <code>addX()<\/code>, <code>removeY()<\/code>) olmamal\u0131d\u0131r. Yaln\u0131zca alanlar\u0131n de\u011ferlerini d\u00f6nd\u00fcren <code>getter<\/code> metotlar\u0131 bulunmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-java\">public final class ImmutableClass {\n    private final String name;\n    private final int id;\n\n    public ImmutableClass(String name, int id) {\n        this.name = name;\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public int getId() {\n        return id;\n    }\n}<\/code><\/pre>\n<h4>5. E\u011fer S\u0131n\u0131f\u0131n\u0131z Mutable Nesnelere Referans \u0130\u00e7eriyorsa, Kurucu Metotta Bu Nesnelerin Derin Kopyas\u0131n\u0131 Al\u0131n<\/h4>\n<p>Bu kural, de\u011fi\u015ftirilemez s\u0131n\u0131f olu\u015fturman\u0131n en kritik ve en s\u0131k g\u00f6zden ka\u00e7an noktalar\u0131ndan biridir. E\u011fer de\u011fi\u015ftirilemez s\u0131n\u0131f\u0131n\u0131z, <code>Date<\/code>, <code>ArrayList<\/code>, <code>HashMap<\/code> gibi de\u011fi\u015ftirilebilir (mutable) bir nesneye referans i\u00e7eriyorsa, bu nesnelerin referanslar\u0131n\u0131 do\u011frudan atamak yerine, kurucu metotta &#8220;derin kopyalar\u0131n\u0131&#8221; (deep copy) olu\u015fturmal\u0131s\u0131n\u0131z. Aksi takdirde, d\u0131\u015far\u0131dan gelen referans arac\u0131l\u0131\u011f\u0131yla de\u011fi\u015ftirilebilir nesnenin durumu de\u011fi\u015ftirilebilir ve bu da sizin &#8220;de\u011fi\u015ftirilemez&#8221; s\u0131n\u0131f\u0131n\u0131z\u0131n i\u00e7 durumunu da dolayl\u0131 yoldan de\u011fi\u015ftirmi\u015f olur.<\/p>\n<p><strong>Yanl\u0131\u015f Uygulama (Shallow Copy):<\/strong><\/p>\n<pre><code class=\"language-java\">import java.util.Date;\n\npublic final class IncorrectImmutableDate {\n    private final String name;\n    private final Date birthDate; \/\/ Date mutable bir s\u0131n\u0131ft\u0131r!\n\n    public IncorrectImmutableDate(String name, Date birthDate) {\n        this.name = name;\n        this.birthDate = birthDate; \/\/ Yanl\u0131\u015f: birthDate'in referans\u0131 do\u011frudan atan\u0131yor.\n                                    \/\/ D\u0131\u015far\u0131dan birthDate nesnesi de\u011fi\u015ftirilirse, s\u0131n\u0131f\u0131n durumu da de\u011fi\u015fir.\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public Date getBirthDate() {\n        return birthDate; \/\/ Yanl\u0131\u015f: Mutable nesnenin referans\u0131 do\u011frudan d\u00f6nd\u00fcr\u00fcl\u00fcyor.\n                          \/\/ D\u0131\u015far\u0131dan bu referans kullan\u0131larak nesne de\u011fi\u015ftirilebilir.\n    }\n}<\/code><\/pre>\n<p>Bu <code>IncorrectImmutableDate<\/code> s\u0131n\u0131f\u0131, d\u0131\u015far\u0131dan <code>birthDate<\/code> nesnesinin de\u011fi\u015ftirilmesiyle kendi i\u00e7 durumunu de\u011fi\u015ftirebilir:<\/p>\n<pre><code class=\"language-java\">Date originalDate = new Date();\nIncorrectImmutableDate person = new IncorrectImmutableDate(\"Alice\", originalDate);\nSystem.out.println(\"Original person birthDate: \" + person.getBirthDate());\n\n\/\/ D\u0131\u015far\u0131dan mutable Date nesnesini de\u011fi\u015ftirme\noriginalDate.setTime(0); \/\/ Tarihi 1 Ocak 1970'e ayarla\nSystem.out.println(\"After changing originalDate: \" + person.getBirthDate()); \/\/ person'\u0131n birthDate'i de de\u011fi\u015fti!<\/code><\/pre>\n<p><strong>Do\u011fru Uygulama (Deep Copy):<\/strong><\/p>\n<pre><code class=\"language-java\">import java.util.Date;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Collections; \/\/ De\u011fi\u015ftirilemez koleksiyonlar i\u00e7in\n\npublic final class CorrectImmutablePerson {\n    private final String name;\n    private final Date birthDate;\n    private final List<String> hobbies;\n\n    public CorrectImmutablePerson(String name, Date birthDate, List<String> hobbies) {\n        this.name = name;\n        \/\/ Kural 5: Mutable nesnelerin derin kopyas\u0131n\u0131 al\n        this.birthDate = new Date(birthDate.getTime()); \/\/ Date nesnesinin kopyas\u0131n\u0131 olu\u015ftur\n        this.hobbies = new ArrayList<>(hobbies); \/\/ List'in kopyas\u0131n\u0131 olu\u015ftur\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public Date getBirthDate() {\n        \/\/ Kural 6: Getter metotlar\u0131nda mutable nesnelerin derin kopyas\u0131n\u0131 d\u00f6nd\u00fcr\n        return new Date(this.birthDate.getTime()); \/\/ Kopyas\u0131n\u0131 d\u00f6nd\u00fcr, orijinali korunsun\n    }\n\n    public List<String> getHobbies() {\n        \/\/ Kural 6: Getter metotlar\u0131nda mutable nesnelerin derin kopyas\u0131n\u0131 d\u00f6nd\u00fcr\n        \/\/ Veya daha iyisi: De\u011fi\u015ftirilemez bir g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcr\n        return Collections.unmodifiableList(new ArrayList<>(this.hobbies));\n    }\n}<\/code><\/pre>\n<p>Bu <code>CorrectImmutablePerson<\/code> s\u0131n\u0131f\u0131, <code>birthDate<\/code> ve <code>hobbies<\/code> alanlar\u0131n\u0131n de\u011fi\u015ftirilemezli\u011fini garanti eder:<\/p>\n<pre><code class=\"language-java\">Date originalDate = new Date();\nList<String> originalHobbies = new ArrayList<>(List.of(\"Reading\", \"Coding\"));\nCorrectImmutablePerson person = new CorrectImmutablePerson(\"Bob\", originalDate, originalHobbies);\n\nSystem.out.println(\"Original person birthDate: \" + person.getBirthDate());\nSystem.out.println(\"Original person hobbies: \" + person.getHobbies());\n\n\/\/ D\u0131\u015far\u0131dan mutable Date nesnesini de\u011fi\u015ftirme\noriginalDate.setTime(0);\nSystem.out.println(\"After changing originalDate: \" + person.getBirthDate()); \/\/ person'\u0131n birthDate'i DE\u011e\u0130\u015eMED\u0130!\n\n\/\/ D\u0131\u015far\u0131dan mutable List nesnesini de\u011fi\u015ftirme\noriginalHobbies.add(\"Gaming\");\nSystem.out.println(\"After changing originalHobbies: \" + person.getHobbies()); \/\/ person'\u0131n hobbies'i DE\u011e\u0130\u015eMED\u0130!\n\n\/\/ Getter'dan d\u00f6nen kopyay\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015fma\nDate returnedDate = person.getBirthDate();\nreturnedDate.setTime(1000); \/\/ Sadece kopyay\u0131 etkiler\nSystem.out.println(\"After changing returnedDate: \" + person.getBirthDate()); \/\/ person'\u0131n birthDate'i DE\u011e\u0130\u015eMED\u0130!\n\nList<String> returnedHobbies = person.getHobbies();\ntry {\n    returnedHobbies.add(\"Drawing\"); \/\/ UnsupportedOperationException f\u0131rlat\u0131r\n} catch (UnsupportedOperationException e) {\n    System.out.println(\"Cannot modify returned hobbies list.\");\n}\nSystem.out.println(\"After trying to change returnedHobbies: \" + person.getHobbies()); \/\/ person'\u0131n hobbies'i DE\u011e\u0130\u015eMED\u0130!<\/code><\/pre>\n<h4>6. E\u011fer S\u0131n\u0131f\u0131n\u0131z Mutable Nesnelere Referans \u0130\u00e7eriyorsa, Getter Metotlar\u0131nda Bu Nesnelerin Derin Kopyas\u0131n\u0131 D\u00f6nd\u00fcr\u00fcn<\/h4>\n<p>Bu kural, Kural 5&#8217;in tamamlay\u0131c\u0131s\u0131d\u0131r. E\u011fer <code>getter<\/code> metotlar\u0131n\u0131z, de\u011fi\u015ftirilebilir bir nesnenin referans\u0131n\u0131 do\u011frudan d\u00f6nd\u00fcr\u00fcrse, bu referans\u0131 alan d\u0131\u015f kod, nesnenin durumunu de\u011fi\u015ftirebilir ve dolay\u0131s\u0131yla sizin de\u011fi\u015ftirilemez s\u0131n\u0131f\u0131n\u0131z\u0131n i\u00e7 durumunu da dolayl\u0131 yoldan bozabilir. Bu nedenle, <code>getter<\/code> metotlar\u0131 da de\u011fi\u015ftirilebilir nesnelerin bir kopyas\u0131n\u0131 d\u00f6nd\u00fcrmeli veya <code>Collections.unmodifiableList()<\/code>, <code>Collections.unmodifiableMap()<\/code> gibi metotlar arac\u0131l\u0131\u011f\u0131yla de\u011fi\u015ftirilemez bir g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc sunmal\u0131d\u0131r.<\/p>\n<p>Yukar\u0131daki <code>CorrectImmutablePerson<\/code> \u00f6rne\u011finde bu kural\u0131n uygulamas\u0131n\u0131 g\u00f6rebilirsiniz. <code>getBirthDate()<\/code> metodu <code>new Date(this.birthDate.getTime())<\/code> ile <code>Date<\/code> nesnesinin bir kopyas\u0131n\u0131 d\u00f6nd\u00fcr\u00fcrken, <code>getHobbies()<\/code> metodu <code>Collections.unmodifiableList(new ArrayList<>(this.hobbies))<\/code> ile listenin de\u011fi\u015ftirilemez bir g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcrmektedir.<\/p>\n<h4>7. <code>equals()<\/code> ve <code>hashCode()<\/code> Metotlar\u0131n\u0131 Do\u011fru \u015eekilde Override Edin (\u0130ste\u011fe Ba\u011fl\u0131 ama \u0130yi Uygulama)<\/h4>\n<p>De\u011fi\u015ftirilemez nesneler, genellikle <code>HashMap<\/code> veya <code>HashSet<\/code> gibi koleksiyonlarda anahtar olarak kullan\u0131l\u0131r. Bu durumlarda, nesnelerin e\u015fitli\u011fini ve hash kodlar\u0131n\u0131 do\u011fru bir \u015fekilde tan\u0131mlamak \u00f6nemlidir. De\u011fi\u015ftirilemez nesnelerin t\u00fcm alanlar\u0131 <code>final<\/code> oldu\u011fu i\u00e7in, <code>equals()<\/code> ve <code>hashCode()<\/code> metotlar\u0131 bir kez do\u011fru \u015fekilde uyguland\u0131\u011f\u0131nda, nesnenin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca tutarl\u0131 sonu\u00e7lar verecektir.<\/p>\n<pre><code class=\"language-java\">import java.util.Date;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Objects; \/\/ Java 7+ i\u00e7in\n\npublic final class CompleteImmutablePerson {\n    private final String name;\n    private final Date birthDate;\n    private final List<String> hobbies;\n\n    public CompleteImmutablePerson(String name, Date birthDate, List<String> hobbies) {\n        this.name = name;\n        this.birthDate = new Date(birthDate.getTime());\n        this.hobbies = new ArrayList<>(hobbies);\n    }\n\n    public String getName() { return name; }\n    public Date getBirthDate() { return new Date(this.birthDate.getTime()); }\n    public List<String> getHobbies() { return Collections.unmodifiableList(new ArrayList<>(this.hobbies)); }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (o == null || getClass() != o.getClass()) return false;\n        CompleteImmutablePerson that = (CompleteImmutablePerson) o;\n        return Objects.equals(name, that.name) &&\n               Objects.equals(birthDate, that.birthDate) &&\n               Objects.equals(hobbies, that.hobbies);\n    }\n\n    @Override\n    public int hashCode() {\n        return Objects.hash(name, birthDate, hobbies);\n    }\n\n    @Override\n    public String toString() {\n        return \"CompleteImmutablePerson{\" +\n               \"name='\" + name + '\\'' +\n               \", birthDate=\" + birthDate +\n               \", hobbies=\" + hobbies +\n               '}';\n    }\n}<\/code><\/pre>\n<h4>8. <code>toString()<\/code> Metotunu Override Edin (\u0130ste\u011fe Ba\u011fl\u0131 ama \u0130yi Uygulama)<\/h4>\n<p><code>toString()<\/code> metotunu override etmek, hata ay\u0131klama ve loglama s\u0131ras\u0131nda nesnelerin okunabilir bir temsilini sa\u011flamak i\u00e7in her zaman iyi bir pratiktir. De\u011fi\u015ftirilemez s\u0131n\u0131flarda bu, nesnenin durumunu h\u0131zl\u0131ca g\u00f6rmenizi sa\u011flar.<\/p>\n<p>Yukar\u0131daki <code>CompleteImmutablePerson<\/code> \u00f6rne\u011finde <code>toString()<\/code> metodunun implementasyonunu g\u00f6rebilirsiniz.<\/p>\n<h3>De\u011fi\u015ftirilemez S\u0131n\u0131flar\u0131n Avantajlar\u0131<\/h3>\n<p>De\u011fi\u015ftirilemez s\u0131n\u0131flar, yaz\u0131l\u0131m tasar\u0131m\u0131nda sunduklar\u0131 faydalar nedeniyle olduk\u00e7a de\u011ferlidir:<\/p>\n<p>*   <strong>\u0130\u015f Par\u00e7ac\u0131\u011f\u0131 G\u00fcvenli\u011fi (Thread Safety):<\/strong> En \u00f6nemli avantajd\u0131r. Bir nesnenin durumu asla de\u011fi\u015fmedi\u011fi i\u00e7in, birden fazla i\u015f par\u00e7ac\u0131\u011f\u0131 taraf\u0131ndan herhangi bir senkronizasyon mekanizmas\u0131na (kilitler, monit\u00f6rler vb.) ihtiya\u00e7 duymadan g\u00fcvenle payla\u015f\u0131labilir. Bu, e\u015fzamanl\u0131 programlamadaki karma\u015f\u0131kl\u0131\u011f\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r ve <code>deadlock<\/code> veya <code>race condition<\/code> gibi hatalar\u0131 \u00f6nler.<br \/>\n*   <strong>Basitlik:<\/strong> De\u011fi\u015ftirilemez nesnelerle \u00e7al\u0131\u015fmak daha kolayd\u0131r \u00e7\u00fcnk\u00fc bir kez olu\u015fturulduktan sonra durumlar\u0131n\u0131n de\u011fi\u015fmeyece\u011fini bilirsiniz. Bu, kodun anla\u015f\u0131labilirli\u011fini ve bak\u0131m\u0131n\u0131 art\u0131r\u0131r. Nesnenin durumu hakk\u0131nda s\u00fcrekli endi\u015felenmenize gerek kalmaz.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Bir nesnenin durumu de\u011fi\u015ftirilemez oldu\u011funda, k\u00f6t\u00fc niyetli veya hatal\u0131 kodun nesnenin i\u00e7 durumunu bozmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Bu, \u00f6zellikle g\u00fcvenlik a\u00e7\u0131s\u0131ndan kritik uygulamalarda \u00f6nemlidir.<br \/>\n*   <strong>\u00d6nbellekleme (Caching):<\/strong> De\u011fi\u015ftirilemez nesnelerin hash kodlar\u0131, olu\u015fturulduktan sonra de\u011fi\u015fmeyece\u011fi i\u00e7in bir kez hesaplan\u0131p \u00f6nbelle\u011fe al\u0131nabilir. Bu, <code>HashMap<\/code> veya <code>HashSet<\/code> gibi hash tabanl\u0131 koleksiyonlarda anahtar olarak kullan\u0131ld\u0131klar\u0131nda performans art\u0131\u015f\u0131 sa\u011flar.<br \/>\n*   <strong>Koleksiyonlarda G\u00fcvenli Kullan\u0131m:<\/strong> <code>HashMap<\/code> veya <code>HashSet<\/code> gibi koleksiyonlarda anahtar olarak kullan\u0131ld\u0131klar\u0131nda, anahtar\u0131n hash kodunun veya e\u015fitlik durumunun de\u011fi\u015fmeyece\u011fi garanti edilir. Bu, anahtar\u0131n koleksiyon i\u00e7inde kaybolmas\u0131n\u0131 engeller.<br \/>\n*   <strong>Hata Ay\u0131klama Kolayl\u0131\u011f\u0131:<\/strong> Bir nesnenin durumu de\u011fi\u015fmedi\u011fi i\u00e7in, bir hata olu\u015ftu\u011funda nesnenin hangi noktada yanl\u0131\u015f bir duruma ge\u00e7ti\u011fini bulma sorunu ortadan kalkar. Nesne her zaman olu\u015fturuldu\u011fu durumdad\u0131r.<br \/>\n*   <strong>Nesne Payla\u015f\u0131m\u0131:<\/strong> De\u011fi\u015ftirilemez nesneler, kopyalama maliyeti olmadan g\u00fcvenle payla\u015f\u0131labilir. Bu, bellek kullan\u0131m\u0131n\u0131 azaltabilir ve nesne olu\u015fturma maliyetini d\u00fc\u015f\u00fcrebilir (e\u011fer nesneler s\u0131k\u00e7a kopyalanmak yerine payla\u015f\u0131l\u0131yorsa).<\/p>\n<h3>De\u011fi\u015ftirilemez S\u0131n\u0131flar\u0131n Dezavantajlar\u0131 (veya Dikkat Edilmesi Gerekenler)<\/h3>\n<p>De\u011fi\u015ftirilemez s\u0131n\u0131flar\u0131n bir\u00e7ok avantaj\u0131 olsa da, baz\u0131 durumlarda dikkatli olmak veya alternatif yakla\u015f\u0131mlar\u0131 de\u011ferlendirmek gerekebilir:<\/p>\n<p>*   <strong>Performans (Potansiyel):<\/strong> De\u011fi\u015ftirilemez nesneler, her de\u011fi\u015fiklik gerektiren i\u015flemde yeni bir nesne olu\u015fturulmas\u0131n\u0131 gerektirir. \u00d6rne\u011fin, bir <code>String<\/code> nesnesini de\u011fi\u015ftirmek yerine, <code>concat()<\/code> gibi metotlar yeni bir <code>String<\/code> nesnesi d\u00f6nd\u00fcr\u00fcr. E\u011fer \u00e7ok s\u0131k de\u011fi\u015fiklik yap\u0131lmas\u0131 gereken bir senaryo varsa (\u00f6rne\u011fin, bir d\u00f6ng\u00fc i\u00e7inde <code>String<\/code> birle\u015ftirmek), bu durum gereksiz nesne olu\u015fturma ve \u00e7\u00f6p toplama (garbage collection) y\u00fck\u00fcne neden olabilir. Bu t\u00fcr durumlarda <code>StringBuilder<\/code> veya <code>StringBuffer<\/code> gibi de\u011fi\u015ftirilebilir alternatifler daha verimli olabilir.<br \/>\n*   <strong>Bellek Kullan\u0131m\u0131:<\/strong> Her &#8220;de\u011fi\u015fiklik&#8221; i\u00e7in yeni bir nesne olu\u015fturulmas\u0131, \u00f6zellikle \u00e7ok say\u0131da k\u00fc\u00e7\u00fck nesnenin s\u00fcrekli olarak olu\u015fturulup at\u0131ld\u0131\u011f\u0131 senaryolarda bellek kullan\u0131m\u0131n\u0131 art\u0131rabilir. Ancak modern JVM&#8217;lerin optimize edilmi\u015f \u00e7\u00f6p toplama mekanizmalar\u0131 sayesinde bu genellikle b\u00fcy\u00fck bir sorun te\u015fkil etmez.<br \/>\n*   <strong>Karma\u015f\u0131kl\u0131k (Baz\u0131 Durumlarda):<\/strong> \u00d6zellikle i\u00e7 i\u00e7e ge\u00e7mi\u015f veya karma\u015f\u0131k veri yap\u0131lar\u0131 i\u00e7eren de\u011fi\u015ftirilemez s\u0131n\u0131flar olu\u015fturmak, derin kopyalama mekanizmalar\u0131 nedeniyle ba\u015flang\u0131\u00e7ta biraz daha karma\u015f\u0131k olabilir. T\u00fcm mutable alanlar\u0131n do\u011fru \u015fekilde derin kopyalanmas\u0131 ve getter&#8217;lardan da derin kopyalar\u0131n d\u00f6nd\u00fcr\u00fclmesi titizlik gerektirir.<br \/>\n*   <strong>API Tasar\u0131m\u0131nda Esneklik Eksikli\u011fi:<\/strong> Baz\u0131 durumlarda, bir nesnenin durumunu de\u011fi\u015ftirebilen bir API&#8217;ye sahip olmak daha do\u011fal veya performansl\u0131 olabilir. Ancak bu, genellikle i\u015f par\u00e7ac\u0131\u011f\u0131 g\u00fcvenli\u011fi veya g\u00fcvenlik pahas\u0131na gelir.<\/p>\n<h3>Java&#8217;daki Mevcut De\u011fi\u015ftirilemez S\u0131n\u0131flar<\/h3>\n<p>Java Standart K\u00fct\u00fcphanesi, de\u011fi\u015ftirilemezlik prensibini benimseyen bir\u00e7ok s\u0131n\u0131f i\u00e7erir:<\/p>\n<p>*   <strong><code>String<\/code>:<\/strong> En bilinen de\u011fi\u015ftirilemez s\u0131n\u0131ft\u0131r. T\u00fcm string manip\u00fclasyon metotlar\u0131 yeni bir <code>String<\/code> nesnesi d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong>Wrapper S\u0131n\u0131flar:<\/strong> <code>Integer<\/code>, <code>Long<\/code>, <code>Double<\/code>, <code>Float<\/code>, <code>Byte<\/code>, <code>Short<\/code>, <code>Character<\/code>, <code>Boolean<\/code> gibi ilkel tiplerin sar\u0131c\u0131 (wrapper) s\u0131n\u0131flar\u0131 da de\u011fi\u015ftirilemezdir.<br \/>\n*   <strong><code>BigDecimal<\/code> ve <code>BigInteger<\/code>:<\/strong> B\u00fcy\u00fck say\u0131larla i\u015flem yapmak i\u00e7in kullan\u0131lan bu s\u0131n\u0131flar da de\u011fi\u015ftirilemezdir.<br \/>\n*   <strong><code>java.time<\/code> API S\u0131n\u0131flar\u0131:<\/strong> Java 8 ile gelen yeni tarih ve saat API&#8217;sindeki t\u00fcm s\u0131n\u0131flar (<code>LocalDate<\/code>, <code>LocalTime<\/code>, <code>LocalDateTime<\/code>, <code>ZonedDateTime<\/code>, <code>Instant<\/code>, <code>Duration<\/code>, <code>Period<\/code> vb.) de\u011fi\u015ftirilemezdir. Bu, eski <code>java.util.Date<\/code> ve <code>Calendar<\/code> s\u0131n\u0131flar\u0131n\u0131n mutable do\u011fas\u0131ndan kaynaklanan bir\u00e7ok sorunu ortadan kald\u0131rm\u0131\u015ft\u0131r.<br \/>\n*   <strong><code>Collections.unmodifiableList()<\/code>, <code>Collections.unmodifiableMap()<\/code>, vb.:<\/strong> Bu metotlar, mevcut bir de\u011fi\u015ftirilebilir koleksiyonun &#8220;de\u011fi\u015ftirilemez bir g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc&#8221; d\u00f6nd\u00fcr\u00fcr. Bu, orijinal koleksiyonu de\u011fi\u015ftirmeye devam etseniz bile, d\u00f6nd\u00fcr\u00fclen g\u00f6r\u00fcn\u00fcm arac\u0131l\u0131\u011f\u0131yla de\u011fi\u015fiklik yap\u0131lamayaca\u011f\u0131 anlam\u0131na gelir. Ancak bu, orijinal koleksiyonun hala de\u011fi\u015ftirilebilir oldu\u011fu ve d\u0131\u015far\u0131dan ba\u015fka bir referansla de\u011fi\u015ftirilebilece\u011fi anlam\u0131na gelir. Tamamen de\u011fi\u015ftirilemez koleksiyonlar i\u00e7in Guava gibi k\u00fct\u00fcphanelerdeki <code>ImmutableList<\/code>, <code>ImmutableSet<\/code> gibi yap\u0131lar veya Java 9+ ile gelen <code>List.of()<\/code>, <code>Set.of()<\/code>, <code>Map.of()<\/code> metotlar\u0131 kullan\u0131labilir.<\/p>\n<h3>Ne Zaman De\u011fi\u015ftirilemez S\u0131n\u0131flar Kullan\u0131lmal\u0131?<\/h3>\n<p>De\u011fi\u015ftirilemez s\u0131n\u0131flar her durum i\u00e7in m\u00fckemmel bir \u00e7\u00f6z\u00fcm olmasa da, belirli senaryolarda tercih edilmeleri b\u00fcy\u00fck faydalar sa\u011flar:<\/p>\n<p>*   <strong>\u0130\u015f Par\u00e7ac\u0131\u011f\u0131 G\u00fcvenli\u011fi Kritik Oldu\u011funda:<\/strong> \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 uygulamalarda veri payla\u015f\u0131m\u0131 yaparken, de\u011fi\u015ftirilemez s\u0131n\u0131flar senkronizasyon maliyetlerini ve karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ortadan kald\u0131rarak g\u00fcvenli\u011fi ve performans\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Nesnelerin Anahtar Olarak Kullan\u0131ld\u0131\u011f\u0131 Durumlarda:<\/strong> <code>HashMap<\/code> veya <code>HashSet<\/code> gibi koleksiyonlarda anahtar olarak kullan\u0131lacak nesnelerin de\u011fi\u015ftirilemez olmas\u0131, koleksiyonun tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti eder.<br \/>\n*   <strong>API&#8217;ler veya K\u00fct\u00fcphaneler Tasarlan\u0131rken:<\/strong> D\u0131\u015far\u0131ya a\u00e7\u0131lan API&#8217;lerde de\u011fi\u015ftirilemez nesneler kullanmak, API&#8217;nin kullan\u0131m\u0131n\u0131 basitle\u015ftirir ve istemci kodunun beklenmedik yan etkilerle kar\u015f\u0131la\u015fmas\u0131n\u0131 engeller.<br \/>\n*   <strong>G\u00fcvenlik Kritik Uygulamalarda:<\/strong> Hassas verileri temsil eden nesnelerin durumunun de\u011fi\u015ftirilemez olmas\u0131, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve g\u00fcvenli\u011fini sa\u011flar.<br \/>\n*   <strong>Basit ve Anla\u015f\u0131l\u0131r Kod \u0130stenildi\u011finde:<\/strong> Bir nesnenin durumunun de\u011fi\u015fmeyece\u011fini bilmek, kodun daha kolay okunmas\u0131n\u0131, anla\u015f\u0131lmas\u0131n\u0131 ve hata ay\u0131klanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>De\u011fer Nesneleri (Value Objects) \u0130\u00e7in:<\/strong> Bir kimli\u011fe sahip olmayan, sadece de\u011ferleriyle tan\u0131mlanan nesneler (\u00f6rne\u011fin, bir para miktar\u0131, bir koordinat noktas\u0131) genellikle de\u011fi\u015ftirilemez olarak tasarlanmal\u0131d\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Java&#8217;da de\u011fi\u015ftirilemez s\u0131n\u0131flar olu\u015fturmak, modern yaz\u0131l\u0131m geli\u015ftirmede g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. \u0130\u015f par\u00e7ac\u0131\u011f\u0131 g\u00fcvenli\u011fi, basitlik, g\u00fcvenlik ve performans gibi bir\u00e7ok avantaj sunarlar. <code>final<\/code> anahtar kelimesini do\u011fru kullanmak, t\u00fcm alanlar\u0131 <code>private<\/code> yapmak, setter metotlar\u0131ndan ka\u00e7\u0131nmak ve en \u00f6nemlisi, de\u011fi\u015ftirilebilir nesnelerle \u00e7al\u0131\u015f\u0131rken derin kopyalama prensibini uygulamak, de\u011fi\u015ftirilemez bir s\u0131n\u0131f\u0131n temelini olu\u015fturur.<\/p>\n<p>Her ne kadar baz\u0131 senaryolarda performans veya bellek kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan potansiyel dezavantajlar\u0131 olsa da, bu durumlar genellikle modern JVM optimizasyonlar\u0131 ve do\u011fru tasar\u0131m se\u00e7imleriyle a\u015f\u0131labilir. M\u00fcmk\u00fcn oldu\u011funca de\u011fi\u015ftirilemez s\u0131n\u0131flar\u0131 tercih etmek, daha sa\u011flam, g\u00fcvenli ve bak\u0131m\u0131 kolay Java uygulamalar\u0131 olu\u015fturman\u0131n anahtarlar\u0131ndan biridir. Bu rehber, Java geli\u015ftiricilerine de\u011fi\u015ftirilemez s\u0131n\u0131flar\u0131n g\u00fcc\u00fcn\u00fc anlamalar\u0131 ve projelerinde etkin bir \u015fekilde kullanmalar\u0131 i\u00e7in kapsaml\u0131 bir yol haritas\u0131 sunmaktad\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi\nJava programlamada &#8220;de\u011fi\u015ftirilemez&#8221; (immutable) kavram\u0131, bir nesnenin olu\u015fturu","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-37419","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java&#039;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java&#039;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Java&#039;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi Java programlamada &quot;de\u011fi\u015ftirilemez&quot; (immutable) kavram\u0131, bir nesnenin olu\u015fturu\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-03T21:40:42+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi\",\"datePublished\":\"2026-01-03T21:40:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\"},\"wordCount\":2439,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\",\"name\":\"Java'da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-03T21:40:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java'da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Java'da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi","og_description":"Java'da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi Java programlamada \"de\u011fi\u015ftirilemez\" (immutable) kavram\u0131, bir nesnenin olu\u015fturu","og_url":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-03T21:40:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi","datePublished":"2026-01-03T21:40:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/"},"wordCount":2439,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/","name":"Java'da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-03T21:40:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javada-degistirilemez-immutable-siniflar-olusturma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java&#8217;da De\u011fi\u015ftirilemez (Immutable) S\u0131n\u0131flar Olu\u015fturma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37419"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37419\/revisions"}],"predecessor-version":[{"id":37420,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37419\/revisions\/37420"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}