String str = new String("SOME")
ve String str="SOME"
arasındaki fark nedir? Bu bildirimler performans değişkeni verir mi.Java Dize beyanı
cevap
String str = new String("SOME")
hep
String str="SOME"
bu küçük örneği deneyin kullandığı yığın yeni bir nesne oluşturun:
String s1 = new String("hello");
String s2 = "hello";
String s3 = "hello";
System.err.println(s1 == s2);
System.err.println(s2 == s3);
yığın kullanımı hakkında Gereksiz nesneleri oluştururken önlemek için ikinci form.
hem arasında küçük bir fark vardır.
İkinci beyan değeri sabit SOME
arasında değere sahip bir yeni String oluşturur değişken str
ilk beyan sabit SOME
ilişkili referans assignates ve değişken str
olan referans assignates. İlk durumda
SOME
aynı değere sahip oluşturuldu. Sonuç olarak, bundan kaçınmalısınız. Ayrıca, derleme zamanında, tüm sabitler
SOME
, daha az bellek kullanan aynı örneğe dönüştürülür.
bir sonucu olarak, her zaman ikinci bir sözdizimi tercih ederim.
Kayıt için, çok büyük bir dizeniz varsa ve yalnızca küçük bir alt dizgiyi korumakla ilgiliyseniz, yeni String (String) 'in anlam ifade ettiği senaryolar vardır. . 'Substring' yöntemleri yalnızca orijinal dizgenin sineğlenim görünümünü döndürür, böylece' new String (hugeString.substring (a, b)) 'kullanarak bir kopyasını zorlar ve GC'nin" hugeString "in içeriğini geri çektiğinde kapsamı. Gerçi bir kurucu yapmamalılardı, ama ... – gustafc
Gerçekten de optimizasyon için ilginç bir durum, ama bazı profiler kontrolleri yapmadan önce bu yola gitmeyecektim (sanırım). – Riduidel
İlki yığın yeni bir String nesnesi oluşturur ve str bunu sevk edecektir. Ayrıca literal ayrıca String havuzuna yerleştirilecektir. 2 nesne oluşturulacak ve 1 referans değişkeni demektir.
İkinci seçenek sadece havuzda dize literal yaratacak ve str bunu sevk edecektir. Dolayısıyla sadece 1 Nesne oluşturulacak ve 1 referans oluşturulacaktır. Bu seçenek, her yürütüldüğünde yeni bir tane oluşturmak yerine, her zaman String havuzundan örneği kullanır.
- 1. Java jenerik alan beyanı
- 2. dize türü tek satırlık yay fasulyesi beyanı
- 3. beyanı
- 4. C++ get() ad alanı beyanı
- 5. Regex Java Dize
- 6. Java dize şifrelemek
- 7. Kullanıcı girdisi Dize, Java
- 8. java regex bölünmüş dize
- 9. Java Dize Unicode Değeri
- 10. dönüştürme Dize ben java
- 11. Dize Ayrılma java
- 12. Dize deseni üzerinde ^^ [Java]
- 13. Kaldır dize JAVA
- 14. İki dize değeri, java
- 15. Java + sqlite Dize alanı için alan Dize
- 16. INNER'a İlişkin Durum Beyanı
- 17. Scala: Aynı beyanı
- 18. Implicits ve İşte beyanı
- 19. ClojureScript Parametre Beyanı Hata
- 20. Örtülü beyanı C99
- 21. Çoklu Elseif Beyanı
- 22. luaL_openlibs'nin örtülü beyanı
- 23. Alıcı tipi ileri beyanı
- 24. İç sınıflarda tip parametrelerine bağlı tip beyanı
- 25. Java alt dize kırık kodlama
- 26. Dize LocalDate (Java 8) ayrıştırılamıyor
- 27. Dize Yöntemi'nden "null" alma [java]
- 28. Tarihi dize olarak java dönüştürün
- 29. JAVA bir dize çift ekleme
- 30. Onaltılık dize java dizesine dönüştürme
Ayrıca bkz. Http://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly ve http://stackoverflow.com/questions/390703/what-is-the-purpose-of -the-expression-new-string-in-java – polygenelubricants