Dize Java'da neden değiştirilemez?


177

Bir röportajda String'in neden değişmez olduğu soruldu

Ben şöyle cevapladım:

Biz gibi java bir dize oluştururken String s1="hello";sonra bir nesne oluşturulur dize havuz (merhaba) ve s1 işaret edilecektir merhaba yine yoksa .Þimdi String s2="hello";sonra başka nesne oluşturulmaz ancak s2 işaret eder hello çünkü JVM olacak ilk çek aynı nesne dize havuzunda varsa ya da yoksa. yoksa yeni bir nesne oluşturulur.

Biz değiştirirseniz Şimdi varsayalım java sonra dize kesilebilir izin verirse s1 için hello worldo zaman s2 de olacak değeri hello worldjava dize değişmez yani.

Cevabım ise herhangi bir vücut lütfen bana doğru veya yanlış ?


46
Neden cevap vermek her zaman zordur. En doğru cevap muhtemelen: Çünkü dil tasarımcıları bunun iyi bir fikir olduğunu düşündüler.
Keppil

1
ayrıca bkz., bu cevap

3
Cevabınız bu noktada değil. C ++ std::stringdeğiştirilebilir, ancak dize havuzu da var (daha doğru, karakter dizisi havuzu).
Siyuan Ren

1
@rocking Dürüst olmak gerekirse, doğru olup olmadığı, onu nasıl okuduğuna bağlıdır. Mesele şu ki, dizeler değişmez olduğu için Java bir dize havuzuna sahip olabilir . Eğer dizeleri değişebilir hale getirmeye karar verselerdi, bir dize havuzu kullanmazlardı; bu nedenle "string pool, dolayısıyla değişmez stringler" demek doğru olmayabilir; daha başka bir yol. Nedenleri değişmez dizeleri seçtiğiniz için aşağıda özetlenen ve dize havuzu çalışan bir stratejidir çünkü bundan. Yine de cevabınız yanlış değil , tam değil. Sadece beklemeli ve ne dediklerini görmelisin.
Jason C

34
Bu sorunun neden kapandığını anlayamıyorum. Sözde ilgili cevap Java ile ilgili değildir ve bu sorunun ana konusunu ele almaz, bu da “neden” dir. Benim için bu, sorumsuz bir topluluğun, hakkında hiçbir şey bilmedikleri soru üzerine hareket eden vakalardan biri. Tekrar açmaya aday gösterdim.
Edwin Dalorzo

Yanıtlar:


163

String çeşitli nedenlerle değişmez, işte bir özet:

  • Güvenlik : parametreler genellikle Stringağ bağlantılarında, veritabanı bağlantı URL'lerinde, kullanıcı adlarında / parolalarda vb. Temsil edilir . Değişebilirse, bu parametreler kolayca değiştirilebilir.
  • Senkronizasyon ve eşzamanlılık: String'i otomatik olarak değiştirilemez hale getirmek onları otomatik olarak güvenli hale getirir ve böylece senkronizasyon sorunlarını çözer.
  • Önbellek : derleyici String nesnelerinizi optimize ettiğinde, iki nesne aynı değere sahipse (a = "test" ve b = "test") ve dolayısıyla yalnızca bir dize nesnesine (hem a hem de b için bu ikisinin) aynı nesneyi gösterin).
  • Sınıf yükleme : Stringsınıf yükleme için bağımsız değişkenler olarak kullanılır. Değişebilirse, yanlış sınıfın yüklenmesine neden olabilir (çünkü değiştirilebilir nesneler durumlarını değiştirir).

Bununla birlikte, Stringsadece değişmezliği , genel API'sını kullanarak değiştiremeyeceğiniz anlamına gelir. Aslında yansımayı kullanarak normal API'yi atlayabilirsiniz. Cevabı buradan görebilirsiniz .

Örneğin, Stringdeğiştirilebiliyorsa, aşağıdaki örneği göz önünde bulundurun:

  String a="stack";
  System.out.println(a);//prints stack
  a.setValue("overflow");
  System.out.println(a);//if mutable it would print overflow

14
Güvenliği nasıl etkileyebilir?
Archit Maheshwari

2
Birisi mümkünse Sınıf yüklemesini bir örnekle açıklayabilir mi?
Viraj

6
Güvenlik konusunda, bağlantı parametrelerini değiştirmekle ilgileniyorsam, çalışma zamanında (bir hata ayıklayıcı vb.) Sınıf yüklemesi ile ilgili olarak, Stringdeğiştirilebiliyorsa, sınıf yükleyicisi aktarılan dizeyi alır, bir kopya oluşturur ve kopyasını değiştirmez. Değişken java.lang.Strings ile ilgili bir sorun düşünürken, C ++ 'ın bu sorunu nasıl çözdüğünü düşünün (değişebilir std::strings olduğundan
Sınırlı Kefaret

Güvenlikle ilgili olarak, program çalışırken değiştirilebilir bir dize nasıl değiştirilebilir?
MasterJoe2

String değişmez olduğu için, hashcode'u oluşturma sırasında önbelleğe alınır ve tekrar hesaplanması gerekmez.
Abdul Alim Shakir

45

Java Geliştiricileri, aşağıdaki özellik tasarımı, verimliliği ve güvenliği nedeniyle Dizelerin değişmez olduğuna karar verir .

Tasarım Dizeleri java yığınında "String Intern pool" olarak bilinen özel bir bellek alanında oluşturulur. Yeni bir String nesnesi oluşturmak için String () yapıcısını veya dahili olarak String () yapıcısını kullanan herhangi bir String işlevini kullanmıyorsanız, yeni String oluştururken; String () yapıcı, biz her zaman havuzda yeni dize sabiti oluşturur zaten var olup olmadığını kontrol etmek için havuzda arar method intern () ) değişkenini çağırın . Varsa, varolan String nesnesinin başvurusunu döndürün. String değiştirilemezse, String'i bir referansla değiştirmek diğer referanslar için yanlış değere yol açar.

DZone ile ilgili bu makaleye göre :

Güvenlik Dizesi, ağ bağlantısı, açılış dosyaları vb. Gibi birçok java sınıfı için parametre olarak yaygın olarak kullanılır. Dize değiştirilemezse, bir bağlantı veya dosya değiştirilir ve ciddi güvenlik tehdidine yol açar. Değiştirilebilir dizeler, parametreler dizeler olduğu için Yansıma'da da güvenlik sorununa neden olabilir.

Verimlilik Dizenin karma kodu Java'da sıklıkla kullanılır. Örneğin, bir HashMap'te. Değişmez olmak, hashcode'un her zaman aynı olacağını garanti eder, böylece değişiklikleri endişelendirmeden önbelleğe alınabilir.Bu, her kullanıldığında hashcode'un hesaplanmasına gerek yoktur.


7
Dize havuzunu anlama biçiminiz yanlış. Dize sabitleri stajyer havuzunda oluşturulur, ancak aynı metne sahip birden fazla dize nesnesine sahip olmak mükemmel bir şekilde mümkündür. Dizelerin değişmez olmasının havuz oluşturmayı sağladığını kabul ediyorum, ancak belirttiğiniz kadar havuz yok.
Jon Skeet

@JonSkeet Haklısın. Dize s1 = yeni Dize ("test"); deyimi, intern () yöntemini çağırmadıkça intern havuzunda yeni dize sabiti oluşturur. Dize stajyer havuzu hakkındaki bilgilerimi derinleştirdiğiniz için teşekkür ederiz.
Alex Mathew

2
Bu sadece string yapıcısını kullanmaktan daha fazlasıdır ; örneğin, string, split, concat vb. Gibi yeni bir string oluşturan neredeyse her şey yeni stringler yaratacaktır. Derleme zamanı sabitleri buradaki özel durum, norm değil ...
Jon Skeet

@JonSkeet substring (), concat (), replace () vb. Dahili olarak yeni dize nesnesi oluşturmak için String yapıcısını kullanır. Cevabımı geliştirdiğiniz için teşekkür ederim.
Alex Mathew

2
@JonSkeet - Tüm bu cevaplar değişmezliğin "güvenliği" geliştirdiğini söylüyor, ancak nasıl olduğunu açıklamıyor. Hepsi de yardım etmeyen belirsiz bir dzone makalesine bağlantı veriyor. Cevaplar / bağlantı, kod çalışırken değiştirilebilir bir dizenin nasıl değiştirilebileceğini açıklamaz. Lütfen açıklar mısın ?
MasterJoe2

25

Java tasarımcılarının tasarım yaparken gerçekte ne düşündüğünden emin Stringolamayız, ancak bu nedenleri sadece ipin değişmezliğinden elde ettiğimiz avantajlara dayanarak sonuçlandırabiliriz, bazıları

1. String Sabit Havuzun Varlığı

Tartışıldığı gibi Neden dize dize Sabit Havuz depolanıyor makalesinde, her uygulama çok fazla dize nesneleri ve bunları toplamaya birinci oluşturma dize nesnelerin sürü sonra çöpten JVM kurtarmak için yaratır. JVM, tüm dize nesnelerini String sabit havuzu adı verilen ayrı bir bellek alanında depolar ve bu önbelleğe alınmış havuzdaki nesneleri yeniden kullanır.

Bir dize hazır bilgisi oluşturduğumuzda, JVM ilk olarak bu hazır bilginin sabit havuzda zaten var olup olmadığını görür ve varsa, yeni başvuru SCP'de aynı nesneyi işaret etmeye başlar.

String a = "Naresh";
String b = "Naresh";
String c = "Naresh";

Değeriyle Yukarıdaki örnek dize nesnesinde Nareshyalnızca bir kez SCP oluşturulmuş olur ve tüm referans a, b, cbiz de değişiklik yapmaya çalışırsanız aynı nesneye ama ne işaret eder amesela a.replace("a", "").

İdeal olarak, adeğeri olmalıdır Nreshama b, cçünkü biz değişimi yapıyoruz, bir son kullanıcı olarak değişmeden kalmalıdır asadece. Ve biliyoruz a, b, cbiz bir değişiklik yapmak eğer öyleyse hepsi aynı nesneyi işaret ediyor a, diğerleri de değişime yansıtmalıdır.

Ancak dize değişmezliği bizi bu senaryodan kurtarır ve dize nesnesinin değişmezliği nedeniyle dize nesnesi Nareshasla değişmez. Bu nedenle a, dize nesnesindeki değişiklik yerine herhangi bir değişiklik yaptığımızda NareshJVM, yeni bir nesne oluşturur ave bu nesneye değişiklik yapar.

Dize havuzu yalnızca String'in değişmezliği nedeniyle mümkündür ve String değiştirilemezse, dize nesnelerini önbelleğe alma ve bunları yeniden kullanma olasılığı yoktur çünkü herhangi bir değişken değeri değiştirmiş ve diğerlerini bozmuştur.

Ve bu yüzden JVM tarafından çok özel olarak ele alındı ​​ve özel bir hafıza alanı verildi.

2. İplik Güvenliği

Bir nesne üzerinde birden fazla iş parçacığı çalışırken iş parçacığı için güvenli olarak adlandırılır, ancak hiçbiri durumunu bozamaz ve nesne herhangi bir zamanda her iş parçacığı için aynı durumu tutamaz.

Biz değişmez bir nesne yaratıldıktan sonra hiç kimse tarafından değiştirilemez, bu da her değişmez nesneyi varsayılan olarak iş parçacığı için güvenli kılar. Senkronize yöntemler oluşturmak gibi herhangi bir iş parçacığı güvenlik önlemi uygulamamıza gerek yoktur.

Bu nedenle, değişmez doğası nedeniyle string nesnesi birden çok iş parçacığı tarafından paylaşılabilir ve birçok iş parçacığı tarafından manipüle ediliyor olsa bile değerini değiştirmez.

3. Güvenlik

Her uygulamada, kullanıcının kullanıcı adı \ parolaları, bağlantı URL'leri gibi çeşitli sırları iletmemiz gerekir ve genel olarak, tüm bu bilgiler dize nesnesi olarak iletilir.

Diyelim ki String, doğada değişmez olmazsa, uygulama için ciddi bir güvenlik tehdidine neden olur, çünkü bu değerlerin değiştirilmesine izin verilir ve izin verilirse, yanlış yazılmış kod veya başka herhangi bir kişi nedeniyle değişebilir. Değişken referanslarımıza erişebilir.

4. Sınıf Yükleme

Tartışıldığı gibi , Örnek Java ile yansıma bir nesne oluşturma , kullanabiliriz Class.forName("class_name")daha başka yöntemler bunun için çağırır bellekte bir sınıfı yüklemek için bir yöntem. Ve JVM bile sınıfları yüklemek için bu yöntemleri kullanır.

Ancak açıkça görüyorsanız, bu yöntemlerin tümü sınıf adını bir dize nesnesi olarak kabul eder, bu nedenle Dizeler java sınıfı yüklemesinde kullanılır ve değişmezlik, doğru sınıfın yüklendiği güvenliği sağlar ClassLoader.

Dize'nin değişmez olup olmayacağını varsayalım ve java.lang.Objectbunlar org.theft.OurObjectarasında değiştirilen yüklemeye çalışıyoruz ve şimdi tüm nesnelerimizin birinin istenmeyen şeylere kullanabileceği bir davranışı var.

5. HashCode Önbellekleme

Herhangi bir nesne üzerinde karma işlemlerini gerçekleştireceksek, hashCode()yöntemi geçersiz kılmalı ve nesnenin durumunu kullanarak doğru bir karma kodu oluşturmaya çalışmalıyız. Bir nesnenin durumu değişiyorsa, bu, karma kodunun da değişmesi gerektiği anlamına gelir.

String değişmez olduğu için, bir string nesnesinin tuttuğu değer asla değişmez, yani hashcode değişmez, bu da String sınıfına nesne oluşturma sırasında hashcode'unu önbelleğe alma fırsatı verir.

Evet, String nesnesi, nesne oluşturma sırasında hashcode'unu önbelleğe alır, bu da hashcode'un yeniden hesaplanması gerekmediğinden, bize biraz zaman kazandırması gerekmediği için ilgili işlemler için mükemmel bir adaydır. Bu nedenle String çoğunlukla HashMapanahtar olarak kullanılır .

Java'da Dizginin Neden Değişmez ve Nihai Olduğuna Dair Daha Fazla Bilgi .


1
Güvenlik Hakkında - Değişken dize değeri bellekte nasıl değiştirilebilir? Başka bir kişi değişken referanslarımıza nasıl erişebilir?
MasterJoe2

Birinin referanslara nasıl erişebileceği ile ilgili değil, birinin bunlara erişimi varsa ne olur? belirtildiği gibi "eğer dize doğada değişmez olmazsa, bu değerlerin değiştirilmesine izin verildiği ve izin verildiği takdirde yanlış yazılmış kod veya başka herhangi bir kişi nedeniyle bu durum değişebilir değişken referanslarımıza erişimi olan kullanıcılar. "
Naresh Joshi

Burada nasıl önemli. Referanslara erişmek ya da erişmemek mümkündür. Mümkünse, bunu yapmak için kullanılabilecek 1-2 teknik *** (yani nasıl) adlandırabilirsiniz? Mümkünse, güvenlikle ilgili husus geçerli değildir. *** Örnek - Bir web uygulamasının DB saldırmak için bir teknik -> SQL Enjeksiyon. Referanslara saldırmak için böyle bir teknik biliyor musunuz?
MasterJoe2

Belirtildiği gibi, "Yanlış yazılmış kod veya değişken referanslarımıza erişimi olan başka bir kişi tarafından yapılan değişiklikler nedeniyle olabilir". Örneğin, Dize'nin değişebilir olduğunu ve bir dize sırrı kullanan bir yöntem yazdığınızı varsayalım ve yine bu dize, aralarında başka bir yönteme geçiyor ve bu yöntemlerden biri sizin tarafınızdan yazılmıyor ve bu yöntemde bazı değişiklikler yapılıyor dize şimdi tüm bu yöntemleri çağırdıktan sonra denetim yönteminizi döndürdü ve o dizeyi tekrar kullanıyorsunuz ama değiştirildi.
Naresh Joshi

2
Lütfen herhangi bir bağlantıyı açıklayın ve siteyi yayınlama yoluyla sitenizi tanıtmanın bir yolu olarak kullanmayın. Bkz. İyi bir cevabı nasıl yazarım? .
Yvette

21

DZone ile ilgili bu makaleye göre en önemli neden :

Dize Sabit Havuzu ... Dize değiştirilebiliyorsa, dizeyi bir başvuruyla değiştirmek diğer başvurular için yanlış değere yol açar.

Güvenlik

Dize, ağ bağlantısı, açılış dosyaları vb. Gibi birçok java sınıfı için parametre olarak yaygın olarak kullanılır. Dize değiştirilemezse, bir bağlantı veya dosya değiştirilir ve ciddi güvenlik tehdidine yol açar. ...

Umarım size yardımcı olur.


@JasonC Sadece cevabımın yanlış olup olmadığını bilmek istiyorum. Görüşmeye zaten katılmış ve sonucu bekliyordum. Cevap onlara doğruysa, o zaman seçileceğim
sallanırken

1
Bildiğim kadarıyla cevabınız doğru, ama değişmez, referansın asla işaret eden yeri değiştirmeyeceği anlamına gelir.Röportajınız için en iyisi.
JDGuide

1
1. noktanızı kabul ederseniz, tüm nesnelerin değişmez olması gerekir.
nicomp

Merhaba JDeveloper, cevabınızın kaynağına uygun atıfta bulunmak için cevabınızı düzenledim. İçeriğin kelimesi kelimesine kopyaları için her zaman blok tırnak işareti kullanmayı unutmayın. Teşekkürler!
NickL

DZone makalesi , Strign havuzunun çalışmasıyla ilgili büyük hatalar içerir . Öyle sadece sabitler için. Ergo belirtilen mantık geçersiz.
Lorne Marquis

4

Neden bu dize Java bağışık veya Final olduğunu okuyun ve aşağıdaki en önemli nedeni olabilir varsayalım:

String nesneleri String havuzunda önbelleğe alındığından, String Java'da Değişmez . Önbelleğe alınan Dize değişmezleri birden çok istemci arasında paylaşıldığından , her zaman bir istemcinin eyleminin tüm diğer istemcileri etkileyeceği bir risk vardır.


1

Haklısın. Java'da gerçek Stringkavram kullanır String Pool. Bir dize oluşturulduğunda ve dize havuzda zaten varsa, yeni bir nesne oluşturmak ve başvurusunu döndürmek yerine, varolan dizenin başvurusu döndürülür. diğer referanslar için yanlış değere yol açar.

StringDeğişmez olduğu için bir şey daha ekleyeceğim, çoklu iş parçacığı için güvenli ve tek bir String örneği farklı iş parçacıkları arasında paylaşılabilir. Bu, iplik güvenliği için senkronizasyon kullanımını önler, Dizeler dolaylı olarak thread safe.


0

String sınıfı, FINALmiras almak ve temel yapıyı değiştirmek ve Sting'i değiştirilebilir hale getirmek için herhangi bir sınıf oluşturamayacağınız anlamına gelir.

Başka bir şey örneği değişkeni ve sağlanan String sınıfı yöntemleri, Stringoluşturulduktan sonra nesneyi değiştiremeyeceğiniz şekildedir .

Eklemenizin nedeni String'i hiç değişmez yapmaz.Bu, String'in yığınta nasıl saklandığını söyler.Ayrıca string string, performansta büyük fark yaratır


11
Sınıf nihai olarak bildirilirse, bu sınıfın miras alınamayacağı anlamına gelir, ancak bu sınıfın örnek alanlarının değiştirilemeyeceği ve dolayısıyla sınıfın değişmez olduğu anlamına gelmez.
Dmitry Bychenko

@Zeeshan: Verdiğiniz örnek sınıfların hepsi değişmez.
Siyuan Ren

0

Dize, Sun mikro sistemleri tarafından değiştirilemez olarak verilir, çünkü dize harita koleksiyonunda anahtar olarak saklamak için kullanılabilir. StringBuffer değiştirilebilir. Bu nedenle, eşleme nesnesinde anahtar olarak kullanılamaz


0

Bir Dizginin Java ile değiştirilememesinin en önemli nedeni Güvenlik . Sonraki önbellekleme olacaktır .

Burada verimlilik, eşzamanlılık, tasarım ve dize havuzu , String'in değişmez hale gelmesinden kaynaklandığına inanıyorum. Örneğin. Dize Havuzu oluşturulabilir çünkü Dize değişmezdi, tersi değil.

Gosling röportaj transkriptini kontrol edin buradan

Stratejik bakış açısından, daha sık sorunsuz olma eğilimindedirler. Ve genellikle sonucu önbelleğe almak gibi değişmez şeylerle yapamayacağınız değişmezlerle yapabileceğiniz şeyler vardır. Dosya açma yöntemine bir dize iletirseniz veya bir kullanıcı arabirimindeki bir etiket için bir yapıcıya bir dize iletirseniz, bazı API'lerde (birçok Windows API'sinde olduğu gibi) bir dizi karakter geçirirsiniz. Bu nesnenin alıcısı gerçekten kopyalamak zorundadır, çünkü nesnenin depolama ömrü hakkında hiçbir şey bilmiyorlar. Ve nesneye ne olduğunu, ayaklarının altında değişip değişmediğini bilmiyorlar.

Nihayetinde nesneyi çoğaltmak zorunda kalıyorsunuz çünkü ona sahip olup olmadığınızı bilmiyorsunuz. Değişmez cisimlerle ilgili güzel şeylerden biri de cevabın "Evet, tabii ki öyle" olduğudur. Çünkü değiştirme hakkına sahip olan mülkiyet sorunu mevcut değil.

Dizeleri değişmez olmaya zorlayan şeylerden biri güvenlikti. Bir dosya açma yönteminiz var. Bir dize iletirsiniz. Ve daha sonra işletim sistemi çağrısı yapmadan önce her türlü kimlik doğrulama kontrolünü yapıyor. Dize'yi etkili bir şekilde mutasyona uğratan bir şey yapmayı başarırsanız, güvenlik kontrolünden sonra ve işletim sistemi çağrısından önce, sonra patlarsınız. Bu kesin örnek, Dizelerin değişmez olmasını gerçekten talep eden şeydir


0

Harika cevaplara ek olarak, birkaç nokta eklemek istedim. Strings gibi, Array iki diziler oluşturmak eğer öyleyse dizinin başlangıç referansı tutan arr1ve arr2ve benzeri bir şey yoktu arr2 = arr1bu başvuruyu yapacak arr2aynı arr1nedenle örneğin diğerinin değişime neden olacaktır bunlardan birinde değerini değiştirerek

public class Main {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4};
        int[] b = a;
        a[0] = 8;
        b[1] = 7;
        System.out.println("A: " + a[0] + ", B: " + b[0]);
        System.out.println("A: " + a[1] + ", B: " + b[1]);
        //outputs
        //A: 8, B: 8
        //A: 7, B: 7
    }
}

Sadece koddaki hatalara neden olmakla kalmaz, aynı zamanda kötü niyetli kullanıcı tarafından da kullanılabilir. Yönetici şifresini değiştiren bir sisteminiz varsa varsayalım. Kullanıcı ilk girmek zorunda newPasswordve sonra oldPasswordeğer oldPasswordaynı adminPassşifre programı değişikliği adminPass = newPassword. yeni şifrenin yönetici şifresi ile aynı referansa sahip olduğunu varsayalım, bu nedenle kötü bir programcı, tempeğer kullanıcı oldPasswordeşitse tempşifreyi değiştirirse kullanıcı veri girmeden önce yönetici şifresini tutmak için bir değişken oluşturabilir.adminPass = temp. Bunun yeni şifreyi kolayca girebileceğini ve asla eski şifreyi ve abracadabra'yı giremeyeceğini bilen biri yönetici erişimine sahip. Neden JVM her nesne için yeni bir dize oluşturmak ve bunun için bellekte eşsiz bir yer yoktur Strings öğrenmeye Başka bir şey anlamadım ve sadece kullanarak da yapabilirsiniz new String("str");Eğer istemem nedeni her zaman kullanım için newolan hafıza verimli değil ve çünkü çoğu durumda daha yavaştır devamı .


0

Eğer HELLOsizin String sonra değiştiremezsiniz HELLOiçinHILLO . Bu özelliğe değişmezlik özelliği denir.

HELLO String'i işaret etmek için birden fazla pointer String değişkeniniz olabilir.

Ancak HELLO char Array ise HELLO'yu HILLO olarak değiştirebilirsiniz. Örneğin,

char[] charArr = 'HELLO';
char[1] = 'I'; //you can do this

Cevap:

Programlama dillerinin değişken veri değişkenleri vardır, böylece anahtar, değer çiftinde anahtar olarak kullanılabilir. Dize değişkenleri anahtar / indeks olarak kullanılır, bu nedenle değiştirilemezler .


-1

Bakış Securityaçısından bu pratik örneği kullanabiliriz:

DBCursor makeConnection(String IP,String PORT,String USER,String PASS,String TABLE) {

    // if strings were mutable IP,PORT,USER,PASS can be changed by validate function
    Boolean validated = validate(IP,PORT,USER,PASS);

    // here we are not sure if IP, PORT, USER, PASS changed or not ??
    if (validated) {
         DBConnection conn = doConnection(IP,PORT,USER,PASS);
    }

    // rest of the code goes here ....
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.