logo

Java'da String Neden Değiştirilemez veya Sondur?

Nesneye yönelik programlamada, değişmez dize veya nesneler oluşturulduktan sonra değiştirilemez. Ancak yalnızca nesneye yapılan referansı değiştirebiliriz. Nesnenin kendisini değiştirmeyi kısıtlıyoruz. Dize değişmez içinde Java güvenlik, senkronizasyon ve eşzamanlılık, önbelleğe alma ve sınıf yükleme nedeniyle. String'in final yapılmasının nedeni değişmezliği yok etmek ve başkalarının bunu genişletmesine izin vermemektir.

sayılardan oluşan alfabe

String nesneleri String havuzunda önbelleğe alınır ve Dize değişmez . Önbelleğe alınan String değişmezlerine birden çok istemci tarafından erişilir. Dolayısıyla, bir müşterinin gerçekleştirdiği eylemin diğer tüm müşterileri etkileme riski her zaman vardır. Örneğin, bir istemci bir eylem gerçekleştirir ve dize değerini Basınç'tan BASINÇ'a değiştirirse geri kalan tüm istemciler de bu değeri okuyacaktır. Performans açısından String nesnelerinin önbelleğe alınması önemliydi, dolayısıyla bu riski ortadan kaldırmak için String'i Değiştirilemez hale getirmemiz gerekiyor.

Java'da String Neden Değiştirilemez veya Sondur?

Bunlar String'i değişmez yapmanın bazı nedenleridir:

  • String Java'da değişmez değilse String havuzu mümkün olamaz. Çok fazla yığın alanı kaydedilir JRE . Aynı dize değişkenine havuzdaki birden fazla dize değişkeni tarafından atıfta bulunulabilir. String değişmez değilse, String interning de mümkün olamaz.
  • String'i değişmez yapmazsak uygulama için ciddi bir güvenlik tehdidi oluşturacaktır. Örneğin, veritabanı kullanıcı adları, şifreler, veritabanı bağlantılarını almak için dizeler olarak iletilir. soket programlama ana bilgisayar ve bağlantı noktası açıklamaları da dizeler olarak iletilir. String değiştirilemez olduğundan değeri değiştirilemez. String değişmez kalmazsa, herhangi bir bilgisayar korsanı referans değerini değiştirerek uygulamada bir güvenlik sorununa neden olabilir.
  • String, değişmezliği nedeniyle çoklu iş parçacığı için güvenlidir. Farklı iş parçacıkları tek bir 'Dize örneğine' erişebilir. Dizeleri örtülü olarak iş parçacığı açısından güvenli hale getirdiğimiz için iş parçacığı güvenliği için senkronizasyonu kaldırır.
  • Değişmezlik, Classloader tarafından doğru sınıfın yüklenmesinin güvenliğini sağlar. Örneğin, Java.sql.Connection sınıfını yüklemeye çalıştığımız ancak myhacked.Connection sınıfına referans verilen değerdeki değişikliklerin veritabanımıza istenmeyen şeyler yaptığı bir örneğimiz olduğunu varsayalım.

Bir örnek üzerinden değişmez kavramını anlayalım.

ImmutableString.java

strsep
 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } } 

Çıktı:

Java'da String Neden Değiştirilemez veya Sondur?

Tanım: Yukarıdaki örneği aşağıdaki diyagramın yardımıyla anlayabiliriz:

Java'da String Neden Değiştirilemez veya Sondur?

Dize sabiti havuzunda, Merhaba değişmeden kalır ve yeni bir dize nesnesi oluşturulur. Selam Dünya . Dizelerin değişmez olduğunu gösterir. Referans değişkeni şunu gösterir: Merhaba değil Selam Dünya.

windows 7 ne zaman çıktı

Eğer bunun şunu ifade etmesini istiyorsak Selam Dünya , onu açıkça bu değişkene atamamız gerekir. Örneğin:

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } } 

Çıktı:

Java'da String Neden Değiştirilemez veya Sondur?