{"id":33422,"date":"2025-11-02T18:41:40","date_gmt":"2025-11-02T15:41:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33422"},"modified":"2025-11-02T18:41:40","modified_gmt":"2025-11-02T15:41:40","slug":"java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/","title":{"rendered":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz"},"content":{"rendered":"<p><body><\/p>\n<h2>Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz<\/h2>\n<p>Java programlama dilinin kalbinde yer alan <code>String<\/code> s\u0131n\u0131f\u0131, metinsel verileri temsil etmek i\u00e7in kullan\u0131lan temel bir yap\u0131d\u0131r. G\u00fcndelik kodlamadan karma\u015f\u0131k kurumsal uygulamalara kadar her yerde kar\u015f\u0131m\u0131za \u00e7\u0131kan <code>String<\/code>&#8216;ler, Java m\u00fclakatlar\u0131nda da en \u00e7ok sorulan konulardan biridir. Bir Java geli\u015ftiricisinin <code>String<\/code>&#8216;lerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, bellek y\u00f6netimini, performans \u00f6zelliklerini ve yayg\u0131n kullan\u0131m senaryolar\u0131n\u0131 derinlemesine anlamas\u0131 beklenir. Bu makale, Java <code>String<\/code> konulu m\u00fclakat sorular\u0131na kapsaml\u0131 cevaplar sunarak, adaylar\u0131n bu alandaki bilgilerini peki\u015ftirmeyi ve m\u00fclakatlarda ba\u015far\u0131l\u0131 olmalar\u0131n\u0131 sa\u011flamay\u0131 ama\u00e7lamaktad\u0131r.<\/p>\n<h3>String Temelleri: Neden Bu Kadar \u00d6nemli?<\/h3>\n<p><code>java.lang.String<\/code> s\u0131n\u0131f\u0131, Java&#8217;da de\u011fi\u015fmez (immutable) karakter dizilerini temsil eder. De\u011fi\u015fmezlik, bir <code>String<\/code> nesnesi olu\u015fturulduktan sonra i\u00e7eri\u011finin asla de\u011fi\u015ftirilemeyece\u011fi anlam\u0131na gelir. Bu temel \u00f6zellik, <code>String<\/code>&#8216;lerin Java ekosisteminde kritik bir rol oynamas\u0131n\u0131n ana nedenlerinden biridir.<\/p>\n<p>*   <strong>De\u011fi\u015fmezlik (Immutability):<\/strong> <code>String<\/code>&#8216;lerin de\u011fi\u015fmez olmas\u0131, bir\u00e7ok avantaj\u0131 beraberinde getirir.<br \/>\n    *   <strong>G\u00fcvenlik:<\/strong> <code>String<\/code>&#8216;ler, veritaban\u0131 ba\u011flant\u0131 parolalar\u0131, kullan\u0131c\u0131 adlar\u0131 gibi hassas bilgileri saklamak i\u00e7in s\u0131k\u00e7a kullan\u0131l\u0131r. De\u011fi\u015fmez olmalar\u0131, bu bilgilerin bir kez atand\u0131ktan sonra k\u00f6t\u00fc niyetli kodlar taraf\u0131ndan de\u011fi\u015ftirilemeyece\u011fini garanti eder.<br \/>\n    *   <strong>Thread G\u00fcvenli\u011fi:<\/strong> De\u011fi\u015fmez olduklar\u0131 i\u00e7in <code>String<\/code> nesneleri do\u011fal olarak thread-safe&#8217;dir. Birden fazla thread ayn\u0131 <code>String<\/code> nesnesini g\u00fcvenle kullanabilir, \u00e7\u00fcnk\u00fc i\u00e7eri\u011fi asla de\u011fi\u015fmeyecektir.<br \/>\n    *   <strong>\u00d6nbellekleme ve Performans:<\/strong> <code>String<\/code>&#8216;ler de\u011fi\u015fmez oldu\u011fu i\u00e7in hash kodlar\u0131 bir kez hesaplanabilir ve \u00f6nbelle\u011fe al\u0131nabilir. Bu, <code>HashMap<\/code> ve <code>HashSet<\/code> gibi koleksiyonlarda <code>String<\/code>&#8216;lerin anahtar olarak verimli bir \u015fekilde kullan\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n    *   <strong><code>String<\/code> Literal Havuzu (SCP):<\/strong> Java, de\u011fi\u015fmezlik sayesinde <code>String<\/code> literal havuzunu (String Constant Pool) verimli bir \u015fekilde y\u00f6netir.<\/p>\n<p>*   <strong><code>String<\/code> Literal Havuzu (SCP &#8211; String Constant Pool):<\/strong> JVM, <code>String<\/code> literal&#8217;lerini (\u00e7ift t\u0131rnak i\u00e7inde belirtilen <code>String<\/code> de\u011ferleri) \u00f6zel bir bellek alan\u0131nda, yani <code>String<\/code> literal havuzunda saklar. Bir <code>String<\/code> literal&#8217;i olu\u015fturuldu\u011funda, JVM \u00f6nce bu havuzda ayn\u0131 de\u011fere sahip bir <code>String<\/code> olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer varsa, mevcut nesnenin referans\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr; yoksa, yeni bir <code>String<\/code> nesnesi olu\u015fturur ve havuza ekleyerek referans\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. Bu mekanizma, bellek t\u00fcketimini azaltarak performans\u0131 art\u0131r\u0131r.<\/p>\n<h3>String, StringBuffer ve StringBuilder Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h3>\n<p>Java&#8217;da <code>String<\/code>&#8216;lerle \u00e7al\u0131\u015f\u0131rken, metin manip\u00fclasyonu i\u00e7in sadece <code>String<\/code> s\u0131n\u0131f\u0131 de\u011fil, ayn\u0131 zamanda <code>StringBuffer<\/code> ve <code>StringBuilder<\/code> s\u0131n\u0131flar\u0131 da kullan\u0131l\u0131r. Bu \u00fc\u00e7 s\u0131n\u0131f\u0131n temel farklar\u0131n\u0131 anlamak, do\u011fru senaryoda do\u011fru arac\u0131 se\u00e7mek a\u00e7\u0131s\u0131ndan kritiktir.<\/p>\n<p>*   <strong><code>String<\/code>:<\/strong><br \/>\n    *   De\u011fi\u015fmezdir (Immutable).<br \/>\n    *   Herhangi bir de\u011fi\u015fiklik (birle\u015ftirme, alt dize alma vb.) yeni bir <code>String<\/code> nesnesi olu\u015fturur.<br \/>\n    *   Performans a\u00e7\u0131s\u0131ndan, s\u0131k\u00e7a metin manip\u00fclasyonu yap\u0131lan durumlarda verimsiz olabilir (\u00e7ok fazla obje olu\u015fturdu\u011fu i\u00e7in).<br \/>\n    *   Thread-safe&#8217;dir, \u00e7\u00fcnk\u00fc de\u011fi\u015fmezdir.<br \/>\n    *   Genellikle sabit veya nadiren de\u011fi\u015fen metinler i\u00e7in tercih edilir.<\/p>\n<p>*   <strong><code>StringBuffer<\/code>:<\/strong><br \/>\n    *   De\u011fi\u015febilirdir (Mutable).<br \/>\n    *   Metin \u00fczerinde yap\u0131lan de\u011fi\u015fiklikler mevcut nesne \u00fczerinde ger\u00e7ekle\u015fir, yeni bir obje olu\u015fturulmaz.<br \/>\n    *   Thread-safe&#8217;dir. Metotlar\u0131 <code>synchronized<\/code> anahtar kelimesiyle i\u015faretlenmi\u015ftir, bu da birden fazla thread&#8217;in ayn\u0131 anda <code>StringBuffer<\/code> nesnesine eri\u015fmesini engeller.<br \/>\n    *   Performans a\u00e7\u0131s\u0131ndan <code>String<\/code>&#8216;den daha iyidir, ancak <code>StringBuilder<\/code>&#8216;dan daha yava\u015ft\u0131r (synchronization overhead nedeniyle).<br \/>\n    *   \u00c7oklu thread ortamlar\u0131nda metin manip\u00fclasyonu gerekti\u011finde kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>StringBuilder<\/code>:<\/strong><br \/>\n    *   De\u011fi\u015febilirdir (Mutable).<br \/>\n    *   Metin \u00fczerinde yap\u0131lan de\u011fi\u015fiklikler mevcut nesne \u00fczerinde ger\u00e7ekle\u015fir.<br \/>\n    *   Thread-safe de\u011fildir. Metotlar\u0131 <code>synchronized<\/code> de\u011fildir.<br \/>\n    *   Performans a\u00e7\u0131s\u0131ndan <code>StringBuffer<\/code>&#8216;dan daha h\u0131zl\u0131d\u0131r (synchronization overhead olmad\u0131\u011f\u0131 i\u00e7in).<br \/>\n    *   Tekli thread ortamlar\u0131nda yo\u011fun metin manip\u00fclasyonu gerekti\u011finde tercih edilir.<\/p>\n<p><strong>\u00d6zet:<\/strong><br \/>\n| \u00d6zellik         | <code>String<\/code>     | <code>StringBuffer<\/code> | <code>StringBuilder<\/code> |<br \/>\n| :&#8212;&#8212;&#8212;&#8212;&#8211; | :&#8212;&#8212;&#8212;&#8211; | :&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8211; |<br \/>\n| <strong>De\u011fi\u015fmezlik<\/strong> | De\u011fi\u015fmez     | De\u011fi\u015febilir    | De\u011fi\u015febilir     |<br \/>\n| <strong>Thread-Safe<\/strong> | Evet         | Evet           | Hay\u0131r           |<br \/>\n| <strong>Performans<\/strong>  | D\u00fc\u015f\u00fck (s\u0131k de\u011fi\u015fiklikte) | Orta           | Y\u00fcksek          |<br \/>\n| <strong>Kullan\u0131m<\/strong>    | Sabit metinler, koleksiyon anahtarlar\u0131 | \u00c7oklu thread metin manip\u00fclasyonu | Tekli thread metin manip\u00fclasyonu |<\/p>\n<h3>S\u0131k\u00e7a Sorulan M\u00fclakat Sorular\u0131 ve Detayl\u0131 Cevaplar<\/h3>\n<p>A\u015fa\u011f\u0131da, Java <code>String<\/code> konusunda m\u00fclakatlarda s\u0131k\u00e7a kar\u015f\u0131la\u015fabilece\u011finiz sorular ve detayl\u0131 cevaplar\u0131 bulunmaktad\u0131r.<\/p>\n<h3>1. Java&#8217;da <code>String<\/code> nedir ve neden de\u011fi\u015fmezdir (immutable)?<\/h3>\n<p><code>String<\/code>, Java&#8217;da karakter dizilerini temsil eden bir s\u0131n\u0131ft\u0131r (<code>java.lang.String<\/code>). De\u011fi\u015fmez olmas\u0131, bir <code>String<\/code> nesnesi olu\u015fturulduktan sonra i\u00e7eri\u011finin (karakter dizisinin) asla de\u011fi\u015ftirilemeyece\u011fi anlam\u0131na gelir. Bir <code>String<\/code> \u00fczerinde herhangi bir &#8220;de\u011fi\u015fiklik&#8221; yapt\u0131\u011f\u0131n\u0131zda (\u00f6rne\u011fin, birle\u015ftirme veya alt dize alma), asl\u0131nda orijinal <code>String<\/code> nesnesi de\u011fi\u015fmez; bunun yerine, yeni bir <code>String<\/code> nesnesi olu\u015fturulur ve bu yeni nesne istenen de\u011fi\u015fikli\u011fi i\u00e7erir.<\/p>\n<p><strong>De\u011fi\u015fmezli\u011fin Nedenleri:<\/strong><br \/>\n*   <strong>G\u00fcvenlik:<\/strong> <code>String<\/code>&#8216;ler, dosya yollar\u0131, a\u011f ba\u011flant\u0131 adresleri, veritaban\u0131 parolalar\u0131 gibi hassas bilgileri temsil etmek i\u00e7in s\u0131k\u00e7a kullan\u0131l\u0131r. De\u011fi\u015fmez olmalar\u0131, bu bilgilerin bir kez atand\u0131ktan sonra d\u0131\u015far\u0131dan de\u011fi\u015ftirilemeyece\u011fini garanti eder.<br \/>\n*   <strong>Thread G\u00fcvenli\u011fi:<\/strong> De\u011fi\u015fmez <code>String<\/code> nesneleri, do\u011fal olarak thread-safe&#8217;dir. Birden fazla thread ayn\u0131 <code>String<\/code> nesnesini payla\u015fabilir ve kullanabilir, \u00e7\u00fcnk\u00fc i\u00e7eri\u011fi asla de\u011fi\u015fmeyece\u011fi i\u00e7in senkronizasyon mekanizmalar\u0131na ihtiya\u00e7 duymazlar.<br \/>\n*   <strong>Performans ve \u00d6nbellekleme:<\/strong> <code>String<\/code>&#8216;ler de\u011fi\u015fmez oldu\u011fu i\u00e7in hash kodlar\u0131 bir kez hesaplanabilir ve \u00f6nbelle\u011fe al\u0131nabilir. Bu, <code>String<\/code>&#8216;lerin <code>HashMap<\/code> ve <code>HashSet<\/code> gibi koleksiyonlarda anahtar olarak verimli bir \u015fekilde kullan\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong><code>String<\/code> Literal Havuzu (SCP):<\/strong> De\u011fi\u015fmezlik, Java&#8217;n\u0131n <code>String<\/code> literal havuzunu (String Constant Pool) verimli bir \u015fekilde y\u00f6netmesine olanak tan\u0131r. Ayn\u0131 de\u011fere sahip <code>String<\/code> literal&#8217;leri tek bir nesne olarak havuzda saklanabilir, bu da bellek kullan\u0131m\u0131n\u0131 optimize eder.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String s = \"Merhaba\"; \/\/ \"Merhaba\" literal havuzda olu\u015fturulur.\ns = s + \" D\u00fcnya\";    \/\/ \"Merhaba D\u00fcnya\" ad\u0131nda YEN\u0130 bir String nesnesi olu\u015fturulur.\n                     \/\/ Orijinal \"Merhaba\" nesnesi de\u011fi\u015fmeden kal\u0131r.\n                     \/\/ s de\u011fi\u015fkeni art\u0131k yeni nesneyi referans eder.<\/code><\/pre>\n<h3>2. <code>String<\/code> literal&#8217;i ile <code>new<\/code> anahtar kelimesi kullanarak <code>String<\/code> olu\u015fturmak aras\u0131ndaki fark nedir?<\/h3>\n<p><code>String<\/code> olu\u015fturman\u0131n iki ana yolu vard\u0131r ve bunlar bellek y\u00f6netimi a\u00e7\u0131s\u0131ndan \u00f6nemli farkl\u0131l\u0131klar g\u00f6sterir:<\/p>\n<p>*   <strong><code>String<\/code> Literal Kullanarak:<\/strong> \u00c7ift t\u0131rnak i\u00e7inde bir <code>String<\/code> de\u011feri belirtildi\u011finde (\u00f6rne\u011fin, <code>\"hello\"<\/code>), bu bir <code>String<\/code> literal&#8217;idir. Java bu durumda <code>String<\/code> literal havuzunu (String Constant Pool &#8211; SCP) kullan\u0131r. JVM \u00f6nce SCP&#8217;de ayn\u0131 de\u011fere sahip bir <code>String<\/code> nesnesi olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<br \/>\n    *   E\u011fer varsa, mevcut nesnenin referans\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n    *   E\u011fer yoksa, yeni bir <code>String<\/code> nesnesi olu\u015fturur, SCP&#8217;ye ekler ve referans\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n    Bu y\u00f6ntem, bellek optimizasyonu sa\u011flar \u00e7\u00fcnk\u00fc ayn\u0131 de\u011ferdeki <code>String<\/code>&#8216;ler i\u00e7in tek bir nesne kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>new<\/code> Anahtar Kelimesi Kullanarak:<\/strong> <code>new String(\"hello\")<\/code> gibi bir ifade kullan\u0131ld\u0131\u011f\u0131nda, Java her zaman y\u0131\u011f\u0131n bellekte (heap) yeni bir <code>String<\/code> nesnesi olu\u015fturur. Ayr\u0131ca, e\u011fer <code>\"hello\"<\/code> literal&#8217;i daha \u00f6nce SCP&#8217;de yoksa, bir kopyas\u0131 da SCP&#8217;ye eklenir. Yani, <code>new<\/code> ile olu\u015fturuldu\u011funda genellikle iki nesne olu\u015fma potansiyeli vard\u0131r: biri heap&#8217;te, di\u011feri SCP&#8217;de (e\u011fer hen\u00fcz yoksa).<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String s1 = \"Java\";          \/\/ SCP'de \"Java\" nesnesi olu\u015fur (veya mevcutsa kullan\u0131l\u0131r).\nString s2 = \"Java\";          \/\/ s2, s1 ile ayn\u0131 SCP'deki nesneyi referans eder.\nString s3 = new String(\"Java\"); \/\/ Heap'te yeni bir \"Java\" nesnesi olu\u015fur.\n                                \/\/ Ayr\u0131ca, e\u011fer yoksa SCP'ye de \"Java\" eklenir.\n\nSystem.out.println(s1 == s2); \/\/ true (ayn\u0131 referans)\nSystem.out.println(s1 == s3); \/\/ false (farkl\u0131 referanslar, biri SCP'de, di\u011feri heap'te)\nSystem.out.println(s1.equals(s3)); \/\/ true (i\u00e7erikleri ayn\u0131)<\/code><\/pre>\n<h3>3. <code>==<\/code> operat\u00f6r\u00fc ile <code>.equals()<\/code> metodu <code>String<\/code>&#8216;ler i\u00e7in nas\u0131l farkl\u0131 \u00e7al\u0131\u015f\u0131r?<\/h3>\n<p>Bu, <code>String<\/code> m\u00fclakatlar\u0131n\u0131n en temel ve en s\u0131k sorulan sorular\u0131ndan biridir.<\/p>\n<p>*   <strong><code>==<\/code> Operat\u00f6r\u00fc:<\/strong> Referans kar\u015f\u0131la\u015ft\u0131rmas\u0131 yapar. \u0130ki <code>String<\/code> referans\u0131n\u0131n ayn\u0131 bellek adresini (yani ayn\u0131 nesneyi) i\u015faret edip etmedi\u011fini kontrol eder.<br \/>\n*   <strong><code>.equals()<\/code> Metodu:<\/strong> \u0130\u00e7erik kar\u015f\u0131la\u015ft\u0131rmas\u0131 yapar. \u0130ki <code>String<\/code> nesnesinin karakter dizisi i\u00e7eriklerinin ayn\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. <code>String<\/code> s\u0131n\u0131f\u0131, <code>Object<\/code> s\u0131n\u0131f\u0131ndaki <code>equals()<\/code> metodunu ge\u00e7ersiz k\u0131larak bu davran\u0131\u015f\u0131 sa\u011flar.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String str1 = \"Hello\";\nString str2 = \"Hello\";\nString str3 = new String(\"Hello\");\nString str4 = \"World\";\n\nSystem.out.println(str1 == str2);        \/\/ true (str1 ve str2 ayn\u0131 SCP nesnesini referans eder)\nSystem.out.println(str1 == str3);        \/\/ false (str1 SCP'de, str3 heap'te farkl\u0131 nesneleri referans eder)\nSystem.out.println(str1.equals(str2));   \/\/ true (i\u00e7erikleri ayn\u0131)\nSystem.out.println(str1.equals(str3));   \/\/ true (i\u00e7erikleri ayn\u0131)\nSystem.out.println(str1.equals(str4));   \/\/ false (i\u00e7erikleri farkl\u0131)<\/code><\/pre>\n<h3>4. <code>String<\/code> birle\u015ftirme (<code>+<\/code> operat\u00f6r\u00fc) nas\u0131l \u00e7al\u0131\u015f\u0131r ve performans etkileri nelerdir?<\/h3>\n<p>Java&#8217;da <code>+<\/code> operat\u00f6r\u00fc, <code>String<\/code>&#8216;leri birle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Ancak, <code>String<\/code>&#8216;lerin de\u011fi\u015fmez olmas\u0131 nedeniyle, bu operat\u00f6r\u00fcn kullan\u0131m\u0131 arka planda farkl\u0131 i\u015flemler tetikler.<\/p>\n<p>*   <strong>Arka Plan \u0130\u015fleyi\u015fi:<\/strong> Java derleyicisi, <code>+<\/code> operat\u00f6r\u00fcn\u00fc kullanarak yap\u0131lan <code>String<\/code> birle\u015ftirmelerini optimize eder.<br \/>\n    *   <strong>Java 5 \u00d6ncesi:<\/strong> Derleyici, <code>StringBuffer<\/code> s\u0131n\u0131f\u0131n\u0131 kullanarak birle\u015ftirme i\u015flemini ger\u00e7ekle\u015ftirirdi.<br \/>\n    *   <strong>Java 5 ve Sonras\u0131:<\/strong> Derleyici, daha h\u0131zl\u0131 olan <code>StringBuilder<\/code> s\u0131n\u0131f\u0131n\u0131 kullanarak birle\u015ftirme i\u015flemini ger\u00e7ekle\u015ftirir.<br \/>\n    Yani, <code>String s = \"A\" + \"B\" + \"C\";<\/code> ifadesi derleyici taraf\u0131ndan yakla\u015f\u0131k olarak <code>new StringBuilder().append(\"A\").append(\"B\").append(\"C\").toString();<\/code> \u015feklinde yorumlan\u0131r.<\/p>\n<p>*   <strong>Performans Etkileri:<\/strong><br \/>\n    *   <strong>Tek seferlik birle\u015ftirme:<\/strong> Az say\u0131da <code>String<\/code>&#8216;i birle\u015ftirirken (<code>\"A\" + \"B\" + \"C\"<\/code> gibi), derleyicinin optimizasyonu sayesinde performans sorunu ya\u015fanmaz.<br \/>\n    *   <strong>D\u00f6ng\u00fc i\u00e7inde birle\u015ftirme:<\/strong> Bir d\u00f6ng\u00fc i\u00e7inde <code>String<\/code>&#8216;leri <code>+<\/code> operat\u00f6r\u00fcyle birle\u015ftirmek ciddi performans sorunlar\u0131na yol a\u00e7abilir. \u00c7\u00fcnk\u00fc her iterasyonda yeni bir <code>StringBuilder<\/code> nesnesi olu\u015fturulur, <code>append<\/code> \u00e7a\u011fr\u0131l\u0131r ve ard\u0131ndan <code>toString()<\/code> metoduyla yeni bir <code>String<\/code> nesnesi olu\u015fturulur. Bu, \u00e7ok say\u0131da ge\u00e7ici obje olu\u015fmas\u0131na ve gereksiz bellek tahsisine neden olur.<\/p>\n<p><strong>K\u00f6t\u00fc \u00d6rnek (D\u00f6ng\u00fc i\u00e7inde <code>+<\/code>):<\/strong><\/p>\n<pre><code class=\"language-java\">String result = \"\";\nfor (int i = 0; i < 1000; i++) {\n    result = result + i; \/\/ Her iterasyonda yeni bir String objesi olu\u015fturulur\n}<\/code><\/pre>\n<p><strong>\u0130yi \u00d6rnek (D\u00f6ng\u00fc i\u00e7inde <code>StringBuilder<\/code>):<\/strong><\/p>\n<pre><code class=\"language-java\">StringBuilder sb = new StringBuilder();\nfor (int i = 0; i < 1000; i++) {\n    sb.append(i); \/\/ Mevcut StringBuilder objesi \u00fczerinde de\u011fi\u015fiklik yap\u0131l\u0131r\n}\nString result = sb.toString();<\/code><\/pre>\n<h3>5. <code>String<\/code> bir <code>null<\/code> de\u011fer alabilir mi? <code>null<\/code> bir <code>String<\/code> \u00fczerinde metot \u00e7a\u011f\u0131r\u0131rsak ne olur?<\/h3>\n<p>Evet, bir <code>String<\/code> referans\u0131 <code>null<\/code> de\u011fer alabilir. Bu, <code>String<\/code> referans\u0131n\u0131n hi\u00e7bir <code>String<\/code> nesnesini i\u015faret etmedi\u011fi anlam\u0131na gelir.<\/p>\n<p>E\u011fer <code>null<\/code> bir <code>String<\/code> referans\u0131 \u00fczerinde herhangi bir metot \u00e7a\u011f\u0131r\u0131rsak (\u00f6rne\u011fin, <code>length()<\/code>, <code>equals()<\/code>, <code>substring()<\/code> gibi), <code>NullPointerException<\/code> (NPE) f\u0131rlat\u0131l\u0131r. Bu, Java'da s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir \u00e7al\u0131\u015fma zaman\u0131 hatas\u0131d\u0131r.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String myString = null;\n\/\/ System.out.println(myString.length()); \/\/ Bu sat\u0131r NullPointerException f\u0131rlat\u0131r<\/code><\/pre>\n<p>Bu nedenle, bir <code>String<\/code> referans\u0131n\u0131 kullanmadan \u00f6nce <code>null<\/code> olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek iyi bir pratiktir:<\/p>\n<pre><code class=\"language-java\">if (myString != null) {\n    System.out.println(myString.length());\n} else {\n    System.out.println(\"String null oldu\u011fu i\u00e7in i\u015flem yap\u0131lamaz.\");\n}<\/code><\/pre>\n<h3>6. <code>String<\/code>'i tersine \u00e7evirmenin farkl\u0131 yollar\u0131 nelerdir?<\/h3>\n<p>Bir <code>String<\/code>'i tersine \u00e7evirmenin birka\u00e7 yayg\u0131n yolu vard\u0131r:<\/p>\n<p>*   <strong><code>StringBuilder.reverse()<\/code> Metodu ile:<\/strong> En basit ve verimli yoldur.<\/p>\n<pre><code class=\"language-java\">String original = \"Java\";\n    StringBuilder sb = new StringBuilder(original);\n    String reversed = sb.reverse().toString();\n    System.out.println(reversed); \/\/ avaj<\/code><\/pre>\n<p>*   <strong>D\u00f6ng\u00fc Kullanarak:<\/strong> Manuel olarak karakter karakter tersine \u00e7evirme.<\/p>\n<pre><code class=\"language-java\">String original = \"Hello\";\n    String reversed = \"\";\n    for (int i = original.length() - 1; i >= 0; i--) {\n        reversed = reversed + original.charAt(i); \/\/ Performans a\u00e7\u0131s\u0131ndan StringBuilder daha iyi olur\n    }\n    System.out.println(reversed); \/\/ olleH<\/code><\/pre>\n<p>    D\u00f6ng\u00fc i\u00e7inde <code>StringBuilder<\/code> kullanmak daha performansl\u0131d\u0131r:<\/p>\n<pre><code class=\"language-java\">String original = \"Hello\";\n    StringBuilder sbReversed = new StringBuilder();\n    for (int i = original.length() - 1; i >= 0; i--) {\n        sbReversed.append(original.charAt(i));\n    }\n    String reversed = sbReversed.toString();\n    System.out.println(reversed); \/\/ olleH<\/code><\/pre>\n<p>*   <strong>Java 8 Stream API ile (Daha Az Yayg\u0131n ama Modern):<\/strong><\/p>\n<pre><code class=\"language-java\">String original = \"Stream\";\n    String reversed = original.chars()\n                              .mapToObj(c -> (char) c)\n                              .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)\n                              .reverse()\n                              .toString();\n    System.out.println(reversed); \/\/ maertS<\/code><\/pre>\n<h3>7. Bir <code>String<\/code>'in palindrom olup olmad\u0131\u011f\u0131n\u0131 nas\u0131l kontrol edersiniz?<\/h3>\n<p>Bir <code>String<\/code>'in palindrom olmas\u0131, ba\u015ftan ve sondan okundu\u011funda ayn\u0131 olmas\u0131 anlam\u0131na gelir (\u00f6rne\u011fin, \"madam\", \"kayak\").<\/p>\n<p>*   <strong><code>StringBuilder.reverse()<\/code> ile Kar\u015f\u0131la\u015ft\u0131rma:<\/strong><\/p>\n<pre><code class=\"language-java\">public boolean isPalindrome(String str) {\n        if (str == null || str.isEmpty()) {\n            return true; \/\/ Bo\u015f veya null string'ler palindrom kabul edilebilir\n        }\n        String reversedStr = new StringBuilder(str).reverse().toString();\n        return str.equals(reversedStr);\n    }\n    \/\/ Kullan\u0131m: isPalindrome(\"madam\") -> true, isPalindrome(\"hello\") -> false<\/code><\/pre>\n<p>*   <strong>\u0130ki \u0130\u015faret\u00e7i (Two-Pointer) Yakla\u015f\u0131m\u0131:<\/strong> Bu y\u00f6ntem, ek bellek kullanmadan ve daha verimli bir \u015fekilde kontrol sa\u011flar.<\/p>\n<pre><code class=\"language-java\">public boolean isPalindromeTwoPointers(String str) {\n        if (str == null || str.isEmpty()) {\n            return true;\n        }\n        int left = 0;\n        int right = str.length() - 1;\n\n        while (left < right) {\n            if (str.charAt(left) != str.charAt(right)) {\n                return false;\n            }\n            left++;\n            right--;\n        }\n        return true;\n    }\n    \/\/ Kullan\u0131m: isPalindromeTwoPointers(\"level\") -> true, isPalindromeTwoPointers(\"world\") -> false<\/code><\/pre>\n<h3>8. Bir <code>String<\/code>'deki belirli bir karakterin veya kelimenin ka\u00e7 kez ge\u00e7ti\u011fini nas\u0131l bulursunuz?<\/h3>\n<p>*   <strong>Karakter Say\u0131s\u0131 \u0130\u00e7in (D\u00f6ng\u00fc ve <code>charAt()<\/code>):<\/strong><\/p>\n<pre><code class=\"language-java\">public int countChar(String str, char c) {\n        int count = 0;\n        for (int i = 0; i < str.length(); i++) {\n            if (str.charAt(i) == c) {\n                count++;\n            }\n        }\n        return count;\n    }\n    \/\/ Kullan\u0131m: countChar(\"Mississippi\", 's') -> 4<\/code><\/pre>\n<p>*   <strong>Karakter Say\u0131s\u0131 \u0130\u00e7in (Java 8 Stream API):<\/strong><\/p>\n<pre><code class=\"language-java\">public long countCharStream(String str, char c) {\n        return str.chars().filter(ch -> ch == c).count();\n    }\n    \/\/ Kullan\u0131m: countCharStream(\"Banana\", 'a') -> 3<\/code><\/pre>\n<p>*   <strong>Kelime Say\u0131s\u0131 \u0130\u00e7in (<code>split()<\/code> metodu):<\/strong><\/p>\n<pre><code class=\"language-java\">public int countWord(String text, String word) {\n        if (text == null || word == null || text.isEmpty() || word.isEmpty()) {\n            return 0;\n        }\n        \/\/ Kelime s\u0131n\u0131rlar\u0131n\u0131 dikkate almak i\u00e7in regex kullanabiliriz\n        String[] words = text.split(\"\\\\s+\"); \/\/ Bo\u015fluklara g\u00f6re ay\u0131r\n        int count = 0;\n        for (String w : words) {\n            if (w.equalsIgnoreCase(word)) { \/\/ B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z kar\u015f\u0131la\u015ft\u0131rma\n                count++;\n            }\n        }\n        return count;\n    }\n    \/\/ Kullan\u0131m: countWord(\"Hello world hello Java\", \"hello\") -> 2<\/code><\/pre>\n<p>*   <strong>Kelime Say\u0131s\u0131 \u0130\u00e7in (<code>indexOf()<\/code> metodu):<\/strong><\/p>\n<pre><code class=\"language-java\">public int countWordIndexOf(String text, String word) {\n        int count = 0;\n        int lastIndex = 0;\n        while (lastIndex != -1) {\n            lastIndex = text.indexOf(word, lastIndex);\n            if (lastIndex != -1) {\n                count++;\n                lastIndex += word.length();\n            }\n        }\n        return count;\n    }\n    \/\/ Kullan\u0131m: countWordIndexOf(\"banana\", \"ana\") -> 2<\/code><\/pre>\n<h3>9. <code>String<\/code>'deki yinelenen karakterleri nas\u0131l kald\u0131r\u0131rs\u0131n\u0131z?<\/h3>\n<p>Bir <code>String<\/code>'deki yinelenen karakterleri kald\u0131rman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<p>*   <strong><code>HashSet<\/code> Kullanarak (S\u0131ra \u00d6nemli De\u011filse):<\/strong> <code>HashSet<\/code> sadece benzersiz \u00f6\u011feleri saklad\u0131\u011f\u0131 i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-java\">public String removeDuplicates(String str) {\n        if (str == null || str.isEmpty()) {\n            return str;\n        }\n        StringBuilder sb = new StringBuilder();\n        HashSet<Character> seen = new HashSet<>();\n        for (char c : str.toCharArray()) {\n            if (seen.add(c)) { \/\/ Karakteri eklemeye \u00e7al\u0131\u015f, ba\u015far\u0131l\u0131 olursa (yani yeni ise) true d\u00f6ner\n                sb.append(c);\n            }\n        }\n        return sb.toString();\n    }\n    \/\/ Kullan\u0131m: removeDuplicates(\"programming\") -> progamni<\/code><\/pre>\n<p>*   <strong><code>LinkedHashSet<\/code> Kullanarak (S\u0131ray\u0131 Korumak \u0130sterseniz):<\/strong> <code>LinkedHashSet<\/code>, ekleme s\u0131ras\u0131n\u0131 koruyan benzersiz \u00f6\u011feler listesi sa\u011flar.<\/p>\n<pre><code class=\"language-java\">public String removeDuplicatesPreserveOrder(String str) {\n        if (str == null || str.isEmpty()) {\n            return str;\n        }\n        StringBuilder sb = new StringBuilder();\n        LinkedHashSet<Character> seen = new LinkedHashSet<>();\n        for (char c : str.toCharArray()) {\n            seen.add(c); \/\/ LinkedHashSet otomatik olarak yinelenenleri g\u00f6rmezden gelir\n        }\n        for (Character c : seen) {\n            sb.append(c);\n        }\n        return sb.toString();\n    }\n    \/\/ Kullan\u0131m: removeDuplicatesPreserveOrder(\"programming\") -> progamin<\/code><\/pre>\n<h3>10. <code>String<\/code>'i <code>int<\/code>'e ve <code>int<\/code>'i <code>String<\/code>'e nas\u0131l d\u00f6n\u00fc\u015ft\u00fcr\u00fcrs\u00fcn\u00fcz?<\/h3>\n<p>*   <strong><code>String<\/code>'den <code>int<\/code>'e D\u00f6n\u00fc\u015ft\u00fcrme:<\/strong><br \/>\n    *   <code>Integer.parseInt(String s)<\/code>: <code>String<\/code>'i ilkel <code>int<\/code> tipine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<br \/>\n    *   <code>Integer.valueOf(String s)<\/code>: <code>String<\/code>'i <code>Integer<\/code> nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<br \/>\n    Her iki metot da ge\u00e7ersiz bir formatla kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda <code>NumberFormatException<\/code> f\u0131rlatabilir.<\/p>\n<pre><code class=\"language-java\">String strNum = \"123\";\n    try {\n        int num1 = Integer.parseInt(strNum); \/\/ num1 = 123\n        Integer num2 = Integer.valueOf(strNum); \/\/ num2 = 123 (Integer nesnesi)\n        System.out.println(num1 + \", \" + num2);\n    } catch (NumberFormatException e) {\n        System.err.println(\"Ge\u00e7ersiz say\u0131 format\u0131: \" + e.getMessage());\n    }<\/code><\/pre>\n<p>*   <strong><code>int<\/code>'ten <code>String<\/code>'e D\u00f6n\u00fc\u015ft\u00fcrme:<\/strong><br \/>\n    *   <code>String.valueOf(int i)<\/code>: En yayg\u0131n ve \u00f6nerilen yoldur.<br \/>\n    *   <code>Integer.toString(int i)<\/code>: <code>Integer<\/code> s\u0131n\u0131f\u0131n\u0131n statik metodudur.<br \/>\n    *   Bo\u015f <code>String<\/code> ile birle\u015ftirme (<code>\"\" + i<\/code>): Derleyici arka planda <code>StringBuilder<\/code> kullanarak d\u00f6n\u00fc\u015ft\u00fcrme yapar.<\/p>\n<pre><code class=\"language-java\">int num = 456;\n    String str1 = String.valueOf(num);    \/\/ \"456\"\n    String str2 = Integer.toString(num);  \/\/ \"456\"\n    String str3 = \"\" + num;               \/\/ \"456\"\n    System.out.println(str1 + \", \" + str2 + \", \" + str3);<\/code><\/pre>\n<h3>11. <code>intern()<\/code> metodunun amac\u0131 nedir?<\/h3>\n<p><code>String<\/code> s\u0131n\u0131f\u0131n\u0131n <code>intern()<\/code> metodu, <code>String<\/code> literal havuzu (SCP) ile ilgilidir. Bir <code>String<\/code> nesnesi \u00fczerinde <code>intern()<\/code> metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda:<br \/>\n*   JVM, <code>String<\/code> literal havuzunda bu nesnenin i\u00e7eri\u011fine e\u015fit bir <code>String<\/code> olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<br \/>\n*   E\u011fer varsa, havuzdaki mevcut <code>String<\/code>'in referans\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   E\u011fer yoksa, bu <code>String<\/code> nesnesinin bir kopyas\u0131n\u0131 havuza ekler ve ard\u0131ndan bu yeni eklenen nesnenin referans\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p><code>intern()<\/code> metodu, <code>new<\/code> anahtar kelimesiyle olu\u015fturulmu\u015f <code>String<\/code> nesnelerini SCP'ye \"dahil etmek\" veya SCP'deki e\u015fde\u011ferine eri\u015fmek i\u00e7in kullan\u0131labilir. Bu, bellek optimizasyonu sa\u011flayabilir ve <code>==<\/code> operat\u00f6r\u00fc ile i\u00e7erik kar\u015f\u0131la\u015ft\u0131rmas\u0131 yapma imkan\u0131 sunabilir.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String s1 = new String(\"Java\"); \/\/ Heap'te yeni obje\nString s2 = \"Java\";             \/\/ SCP'de obje (veya mevcutsa kullan\u0131l\u0131r)\nString s3 = s1.intern();        \/\/ s1'in i\u00e7eri\u011fine e\u015fit olan SCP'deki objeyi referans eder\n\nSystem.out.println(s1 == s2);    \/\/ false (farkl\u0131 referanslar)\nSystem.out.println(s2 == s3);    \/\/ true (s2 ve s3 ayn\u0131 SCP objesini referans eder)<\/code><\/pre>\n<h3>12. <code>StringJoiner<\/code> s\u0131n\u0131f\u0131 nedir ve ne zaman kullan\u0131l\u0131r?<\/h3>\n<p><code>StringJoiner<\/code> s\u0131n\u0131f\u0131, Java 8 ile birlikte tan\u0131t\u0131lm\u0131\u015ft\u0131r ve birden fazla <code>CharSequence<\/code>'\u0131 (genellikle <code>String<\/code>'leri) belirli bir ay\u0131r\u0131c\u0131 (delimiter), iste\u011fe ba\u011fl\u0131 bir \u00f6nek (prefix) ve iste\u011fe ba\u011fl\u0131 bir sonek (suffix) kullanarak birle\u015ftirmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. \u00d6zellikle dinamik olarak bir <code>String<\/code> olu\u015fturman\u0131z ve elemanlar aras\u0131na virg\u00fcl, tire gibi ay\u0131r\u0131c\u0131lar eklemeniz gerekti\u011finde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p><code>String.join()<\/code> metodu da benzer bir i\u015flev g\u00f6r\u00fcr ancak <code>StringJoiner<\/code> daha fazla esneklik sunar (\u00f6nek ve sonek gibi).<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">import java.util.StringJoiner;\n\nStringJoiner sj = new StringJoiner(\", \", \"{\", \"}\"); \/\/ Ay\u0131r\u0131c\u0131, \u00d6nek, Sonek\nsj.add(\"Apple\");\nsj.add(\"Banana\");\nsj.add(\"Cherry\");\n\nSystem.out.println(sj.toString()); \/\/ {Apple, Banana, Cherry}\n\n\/\/ Bo\u015f StringJoiner i\u00e7in varsay\u0131lan de\u011fer\nStringJoiner emptySj = new StringJoiner(\"-\");\nSystem.out.println(emptySj.toString()); \/\/ \u00c7\u0131kt\u0131: (bo\u015f string)\nemptySj.setEmptyValue(\"NO_ITEMS\");\nSystem.out.println(emptySj.toString()); \/\/ NO_ITEMS<\/code><\/pre>\n<h3>13. <code>equals()<\/code> ve <code>hashCode()<\/code> metotlar\u0131n\u0131n <code>String<\/code> s\u0131n\u0131f\u0131 i\u00e7in s\u00f6zle\u015fmesi nas\u0131ld\u0131r?<\/h3>\n<p><code>String<\/code> s\u0131n\u0131f\u0131, <code>Object<\/code> s\u0131n\u0131f\u0131ndan miras ald\u0131\u011f\u0131 <code>equals()<\/code> ve <code>hashCode()<\/code> metotlar\u0131n\u0131 ge\u00e7ersiz k\u0131lar. Bu metotlar i\u00e7in belirli bir s\u00f6zle\u015fme vard\u0131r:<\/p>\n<p>*   <strong><code>equals(Object obj)<\/code>:<\/strong><br \/>\n    *   \u0130ki <code>String<\/code> nesnesinin <strong>i\u00e7eriklerini<\/strong> kar\u015f\u0131la\u015ft\u0131r\u0131r.<br \/>\n    *   E\u011fer her iki <code>String<\/code> de ayn\u0131 karakter dizisini temsil ediyorsa <code>true<\/code> d\u00f6ner, aksi takdirde <code>false<\/code> d\u00f6ner.<br \/>\n    *   B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131d\u0131r.<br \/>\n    *   <code>Object<\/code> s\u0131n\u0131f\u0131n\u0131n <code>equals<\/code> s\u00f6zle\u015fmesine uyar: yans\u0131t\u0131c\u0131 (reflexive), simetrik (symmetric), ge\u00e7i\u015fli (transitive), tutarl\u0131 (consistent) ve <code>null<\/code> i\u00e7in <code>false<\/code> d\u00f6ner.<\/p>\n<p>*   <strong><code>hashCode()<\/code>:<\/strong><br \/>\n    *   <code>String<\/code>'in i\u00e7eri\u011fine g\u00f6re bir hash kodu hesaplar ve d\u00f6nd\u00fcr\u00fcr.<br \/>\n    *   <code>equals()<\/code> metodu ile kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda e\u015fit olan iki <code>String<\/code> nesnesinin <strong>mutlaka ayn\u0131 hash kodunu<\/strong> d\u00f6nd\u00fcrmesi gerekir.<br \/>\n    *   Bu, <code>HashMap<\/code> ve <code>HashSet<\/code> gibi hash tabanl\u0131 koleksiyonlarda <code>String<\/code>'lerin anahtar olarak do\u011fru bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. <code>String<\/code> de\u011fi\u015fmez oldu\u011fu i\u00e7in hash kodu bir kez hesaplan\u0131p \u00f6nbelle\u011fe al\u0131nabilir.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String s1 = \"test\";\nString s2 = \"test\";\nString s3 = new String(\"test\");\n\nSystem.out.println(s1.equals(s2)); \/\/ true\nSystem.out.println(s1.equals(s3)); \/\/ true\n\nSystem.out.println(s1.hashCode()); \/\/ Ayn\u0131 de\u011fer\nSystem.out.println(s2.hashCode()); \/\/ Ayn\u0131 de\u011fer\nSystem.out.println(s3.hashCode()); \/\/ Ayn\u0131 de\u011fer<\/code><\/pre>\n<h3>14. <code>String<\/code>'leri b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131l\u0131\u011f\u0131 olmadan nas\u0131l kar\u015f\u0131la\u015ft\u0131r\u0131rs\u0131n\u0131z?<\/h3>\n<p><code>String<\/code>'leri b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131l\u0131\u011f\u0131 olmadan kar\u015f\u0131la\u015ft\u0131rman\u0131n iki ana yolu vard\u0131r:<\/p>\n<p>*   <strong><code>equalsIgnoreCase(String anotherString)<\/code> Metodu:<\/strong> Bu, <code>String<\/code> s\u0131n\u0131f\u0131n\u0131n sa\u011flad\u0131\u011f\u0131 \u00f6zel bir metottur ve iki <code>String<\/code>'in i\u00e7eriklerini b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf ayr\u0131m\u0131 yapmadan kar\u015f\u0131la\u015ft\u0131r\u0131r. En basit ve \u00f6nerilen y\u00f6ntemdir.<\/p>\n<pre><code class=\"language-java\">String s1 = \"Java\";\n    String s2 = \"java\";\n    String s3 = \"JAVA\";\n\n    System.out.println(s1.equals(s2));          \/\/ false (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131)\n    System.out.println(s1.equalsIgnoreCase(s2)); \/\/ true\n    System.out.println(s1.equalsIgnoreCase(s3)); \/\/ true<\/code><\/pre>\n<p>*   <strong><code>toLowerCase()<\/code> veya <code>toUpperCase()<\/code> Kullanarak:<\/strong> Her iki <code>String<\/code>'i de ayn\u0131 harf durumuna (t\u00fcm\u00fc k\u00fc\u00e7\u00fck veya t\u00fcm\u00fc b\u00fcy\u00fck) d\u00f6n\u00fc\u015ft\u00fcr\u00fcp ard\u0131ndan <code>equals()<\/code> metoduyla kar\u015f\u0131la\u015ft\u0131rabilirsiniz. Ancak bu, yeni <code>String<\/code> nesneleri olu\u015fturdu\u011fu i\u00e7in <code>equalsIgnoreCase()<\/code>'dan daha az verimli olabilir.<\/p>\n<pre><code class=\"language-java\">String s1 = \"Hello\";\n    String s2 = \"hELLo\";\n\n    System.out.println(s1.toLowerCase().equals(s2.toLowerCase())); \/\/ true\n    System.out.println(s1.toUpperCase().equals(s2.toUpperCase())); \/\/ true<\/code><\/pre>\n<h3>15. <code>compareTo()<\/code> metodu ne i\u015fe yarar?<\/h3>\n<p><code>String<\/code> s\u0131n\u0131f\u0131n\u0131n <code>compareTo(String anotherString)<\/code> metodu, iki <code>String<\/code>'i s\u00f6zl\u00fckbilimsel (lexicographical) olarak kar\u015f\u0131la\u015ft\u0131r\u0131r. Yani, s\u00f6zl\u00fck s\u0131ras\u0131na g\u00f6re hangi <code>String<\/code>'in \u00f6nce geldi\u011fini belirler.<\/p>\n<p>*   E\u011fer \u00e7a\u011f\u0131ran <code>String<\/code> (bu <code>String<\/code>), <code>anotherString<\/code>'den s\u00f6zl\u00fckbilimsel olarak <strong>k\u00fc\u00e7\u00fckse<\/strong> (\u00f6nce geliyorsa), <strong>negatif<\/strong> bir tam say\u0131 d\u00f6ner.<br \/>\n*   E\u011fer \u00e7a\u011f\u0131ran <code>String<\/code> (bu <code>String<\/code>), <code>anotherString<\/code>'den s\u00f6zl\u00fckbilimsel olarak <strong>b\u00fcy\u00fckse<\/strong> (sonra geliyorsa), <strong>pozitif<\/strong> bir tam say\u0131 d\u00f6ner.<br \/>\n*   E\u011fer iki <code>String<\/code> <strong>e\u015fitse<\/strong>, <strong>s\u0131f\u0131r<\/strong> d\u00f6ner.<\/p>\n<p>Kar\u015f\u0131la\u015ft\u0131rma, <code>String<\/code>'lerin karakterlerinin Unicode de\u011ferlerine g\u00f6re yap\u0131l\u0131r.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String s1 = \"apple\";\nString s2 = \"banana\";\nString s3 = \"apple\";\nString s4 = \"Apple\";\n\nSystem.out.println(s1.compareTo(s2)); \/\/ Negatif bir say\u0131 (\u00e7\u00fcnk\u00fc 'a' < 'b')\nSystem.out.println(s2.compareTo(s1)); \/\/ Pozitif bir say\u0131 (\u00e7\u00fcnk\u00fc 'b' > 'a')\nSystem.out.println(s1.compareTo(s3)); \/\/ 0 (\u00e7\u00fcnk\u00fc e\u015fitler)\nSystem.out.println(s1.compareTo(s4)); \/\/ Pozitif bir say\u0131 (\u00e7\u00fcnk\u00fc k\u00fc\u00e7\u00fck 'a' > b\u00fcy\u00fck 'A')\n                                      \/\/ (ASCII\/Unicode de\u011ferleri farkl\u0131)\nSystem.out.println(s1.compareToIgnoreCase(s4)); \/\/ 0 (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z)<\/code><\/pre>\n<h3>16. <code>trim()<\/code> ve <code>strip()<\/code> metotlar\u0131 aras\u0131ndaki fark nedir? (<code>Java 11+<\/code>)<\/h3>\n<p>Hem <code>trim()<\/code> hem de <code>strip()<\/code> metotlar\u0131 bir <code>String<\/code>'in ba\u015f\u0131ndaki ve sonundaki bo\u015fluk karakterlerini kald\u0131rmak i\u00e7in kullan\u0131l\u0131r, ancak farkl\u0131 bo\u015fluk tan\u0131mlar\u0131 kullan\u0131rlar. <code>strip()<\/code> metodu Java 11 ile tan\u0131t\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p>*   <strong><code>trim()<\/code>:<\/strong> Sadece ASCII bo\u015fluk karakterlerini (yani, <code>U+0020<\/code> olan bo\u015fluk ve <code>'\\t'<\/code>, <code>'\\n'<\/code>, <code>'\\r'<\/code> gibi kontrol karakterlerini) kald\u0131r\u0131r. <code>Character.isWhitespace(char)<\/code> metodunun eski tan\u0131m\u0131n\u0131 kullan\u0131r.<\/p>\n<p>*   <strong><code>strip()<\/code>:<\/strong> Unicode bo\u015fluk karakterlerini de kald\u0131r\u0131r. <code>Character.isWhitespace(char)<\/code> metodunun yeni tan\u0131m\u0131n\u0131 kullan\u0131r, bu da daha geni\u015f bir bo\u015fluk karakteri yelpazesini (\u00f6rne\u011fin, non-breaking space <code>U+00A0<\/code> gibi) kapsar. <code>strip()<\/code> ayr\u0131ca <code>stripLeading()<\/code> (sadece ba\u015ftaki bo\u015fluklar\u0131 kald\u0131r\u0131r) ve <code>stripTrailing()<\/code> (sadece sondaki bo\u015fluklar\u0131 kald\u0131r\u0131r) versiyonlar\u0131na da sahiptir.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-java\">String text = \"  \\t Hello World \\u2005 \"; \/\/ \\u2005 bir Unicode bo\u015fluk karakteridir (Four-per-em space)\n\nSystem.out.println(\"Orijinal: '\" + text + \"'\");\nSystem.out.println(\"trim():   '\" + text.trim() + \"'\"); \/\/ \"Hello World \\u2005\" (Unicode bo\u015fluk kal\u0131r)\nSystem.out.println(\"strip():  '\" + text.strip() + \"'\"); \/\/ \"Hello World\" (Unicode bo\u015fluk da kald\u0131r\u0131l\u0131r)\n\nString text2 = \"\\u2005leading and trailing\\u2005\";\nSystem.out.println(\"stripLeading(): '\" + text2.stripLeading() + \"'\"); \/\/ \"leading and trailing\\u2005\"\nSystem.out.println(\"stripTrailing(): '\" + text2.stripTrailing() + \"'\"); \/\/ \"\\u2005leading and trailing\"<\/code><\/pre>\n<h3>17. <code>isEmpty()<\/code> ve <code>isBlank()<\/code> metotlar\u0131 aras\u0131ndaki fark nedir? (<code>Java 11+<\/code>)<\/h3>\n<p>Bu iki metot da bir <code>String<\/code>'in i\u00e7eri\u011finin bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in kullan\u0131l\u0131r, ancak farkl\u0131 bo\u015fluk tan\u0131mlar\u0131 vard\u0131r. <code>isBlank()<\/code> metodu Java 11 ile tan\u0131t\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p>*   <strong><code>isEmpty()<\/code>:<\/strong> Bir <code>String<\/code>'in uzunlu\u011funun s\u0131f\u0131r olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer <code>String<\/code>'in uzunlu\u011fu 0 ise <code>true<\/code> d\u00f6ner, aksi takdirde <code>false<\/code> d\u00f6ner. Sadece bo\u015fluk karakterlerinden olu\u015fan bir <code>String<\/code> i\u00e7in <code>false<\/code> d\u00f6ner.<\/p>\n<pre><code class=\"language-java\">String s1 = \"\";        \/\/ Uzunluk 0\n    String s2 = \" \";       \/\/ Uzunluk 1\n    String s3 = \"  \\t  \"; \/\/ Uzunluk > 0\n\n    System.out.println(s1.isEmpty()); \/\/ true\n    System.out.println(s2.isEmpty()); \/\/ false\n    System.out.println(s3.isEmpty()); \/\/ false<\/code><\/pre>\n<p>*   <strong><code>isBlank()<\/code>:<\/strong> Bir <code>String<\/code>'in bo\u015f olup olmad\u0131\u011f\u0131n\u0131 veya sadece bo\u015fluk karakterlerinden (bo\u015fluk, tab, yeni sat\u0131r vb. dahil olmak \u00fczere Unicode bo\u015fluk karakterleri) olu\u015fup olu\u015fmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer <code>String<\/code> bo\u015fsa veya sadece bo\u015fluk karakterlerinden olu\u015fuyorsa <code>true<\/code> d\u00f6ner, aksi takdirde <code>false<\/code> d\u00f6ner.<\/p>\n<pre><code class=\"language-java\">String s1 = \"\";\n    String s2 = \" \";\n    String s3 = \"  \\t  \";\n    String s4 = \"Hello\";\n\n    System.out.println(s1.isBlank()); \/\/ true\n    System.out.println(s2.isBlank()); \/\/ true\n    System.out.println(s3.isBlank()); \/\/ true\n    System.out.println(s4.isBlank()); \/\/ false<\/code><\/pre>\n<p>    <code>isBlank()<\/code> metodu, kullan\u0131c\u0131 giri\u015flerini veya dosya okumalar\u0131n\u0131 i\u015flerken sadece bo\u015fluklardan olu\u015fan sat\u0131rlar\u0131 filtrelemek i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>*   <strong>D\u00f6ng\u00fclerde <code>StringBuilder<\/code> veya <code>StringBuffer<\/code> Kullan\u0131m\u0131:<\/strong> Yo\u011fun <code>String<\/code> birle\u015ftirme i\u015flemleri (\u00f6zellikle d\u00f6ng\u00fc i\u00e7inde) gerekti\u011finde, <code>+<\/code> operat\u00f6r\u00fc yerine <code>StringBuilder<\/code> (tek thread) veya <code>StringBuffer<\/code> (\u00e7oklu thread) kullan\u0131n. Bu, gereksiz <code>String<\/code> nesnelerinin olu\u015fmas\u0131n\u0131 engelleyerek performans\u0131 art\u0131r\u0131r ve bellek t\u00fcketimini azalt\u0131r.<br \/>\n*   <strong>Gereksiz <code>String<\/code> Objeleri Olu\u015fturmaktan Ka\u00e7\u0131nma:<\/strong> <code>new String(\"literal\")<\/code> yerine <code>String literal = \"literal\"<\/code> kullan\u0131n. Bu, <code>String<\/code> literal havuzunu kullanarak bellekten tasarruf etmenizi sa\u011flar.<br \/>\n*   <strong><code>intern()<\/code> Metodunun Dikkatli Kullan\u0131m\u0131:<\/strong> <code>intern()<\/code> metodu, <code>String<\/code> literal havuzunu kullanarak bellek optimizasyonu sa\u011flayabilir, ancak her zaman performans art\u0131\u015f\u0131 sa\u011flamaz. B\u00fcy\u00fck <code>String<\/code>'ler i\u00e7in havuzda arama ve kopyalama i\u015flemleri maliyetli olabilir. Genellikle, \u00e7ok say\u0131da ayn\u0131 <code>String<\/code> de\u011ferinin oldu\u011fu ve <code>==<\/code> ile kar\u015f\u0131la\u015ft\u0131rman\u0131n gerekti\u011fi \u00f6zel durumlar i\u00e7in d\u00fc\u015f\u00fcn\u00fclmelidir.<br \/>\n*   <strong><code>String.join()<\/code> ve <code>StringJoiner<\/code> Kullan\u0131m\u0131:<\/strong> Java 8 ile gelen bu yap\u0131lar, <code>String<\/code> dizilerini veya koleksiyonlar\u0131n\u0131 birle\u015ftirmek i\u00e7in daha okunakl\u0131 ve verimli yollar sunar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Java <code>String<\/code> s\u0131n\u0131f\u0131, basit g\u00f6r\u00fcnse de alt\u0131nda yatan karma\u015f\u0131k mekanizmalar\u0131 ve performans etkileri olan g\u00fc\u00e7l\u00fc bir yap\u0131d\u0131r. M\u00fclakatlarda <code>String<\/code>'ler hakk\u0131nda derinlemesine bilgi sahibi olmak, bir geli\u015ftiricinin Java \u00e7ekirdek prensiplerine olan hakimiyetini g\u00f6sterir. De\u011fi\u015fmezlik, <code>String<\/code> literal havuzu, <code>String<\/code>, <code>StringBuffer<\/code> ve <code>StringBuilder<\/code> aras\u0131ndaki farklar gibi temel kavramlar\u0131 anlamak ve yayg\u0131n manip\u00fclasyon tekniklerini bilmek, yaln\u0131zca m\u00fclakatlarda de\u011fil, g\u00fcnl\u00fck kodlama pratiklerinde de daha sa\u011flam ve verimli uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. Bu makalede ele al\u0131nan sorular ve cevaplar, Java <code>String<\/code> konusundaki bilginizi peki\u015ftirmek ve bir sonraki teknik m\u00fclakat\u0131n\u0131zda kendinize g\u00fcvenle cevap vermek i\u00e7in kapsaml\u0131 bir kaynak sa\u011flamaktad\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz\nJava programlama dilinin kalbinde yer alan String s\u0131n\u0131f\u0131, metinsel verile","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-33422","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 String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz - 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\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz\" \/>\n<meta property=\"og:description\" content=\"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz Java programlama dilinin kalbinde yer alan String s\u0131n\u0131f\u0131, metinsel verile\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-02T15:41:40+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz\",\"datePublished\":\"2025-11-02T15:41:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\"},\"wordCount\":2941,\"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\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\",\"name\":\"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-02T15:41:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz\"}]},{\"@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 String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz - 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\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/","og_locale":"tr_TR","og_type":"article","og_title":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz","og_description":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz Java programlama dilinin kalbinde yer alan String s\u0131n\u0131f\u0131, metinsel verile","og_url":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-02T15:41:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz","datePublished":"2025-11-02T15:41:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/"},"wordCount":2941,"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\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/","url":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/","name":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-02T15:41:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/java-string-mulakat-sorulari-ve-cevaplari-derinlemesine-bir-kilavuz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java String M\u00fclakat Sorular\u0131 ve Cevaplar\u0131: Derinlemesine Bir K\u0131lavuz"}]},{"@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\/33422","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=33422"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33422\/revisions"}],"predecessor-version":[{"id":33423,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33422\/revisions\/33423"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}