İfade "yeni bir Dize amacı ne (...)&; Java"?
Online kod örnekleri bakarken, bazen bir Dize new operatörünü kullanarak bir String nesnesi için sürekli bir görev rastlamak var.
Örneğin:
String s;
...
s = new String("Hello World");
Bu, tabii ki, göre
s = "Hello World";
Amacı ya da etkisi ne kadar olur bu sözdizimi ile aşina değilim ve hiçbir fikrim yok. Dize sabitleri tipik olarak JVM Dize sabitleri ile başa çıkmak için vardır ne olursa olsun sürekli havuzda ve daha sonra depolanan bu yana, bir şey bile öbek üzerinde ayrılmış olurdu?
CEVAP
new String(String)
gerekebilir tek yere bir alt temel olarak yeni bir karakter dizisi kopyalamak için zorlamak için
small=new String(huge.substring(10,20))
Ancak, bu davranış, ne yazık ki kayıtsız ve uygulamaya bağlıdır.
Bir Dize içine büyük dosyaları (en fazla 20 bazı MiB) okuma ve olaydan sonra çizgilerin içine oyma zaman bu tarafından yakıldı. Yukarı satırlar için tüm dizeleri char başvuru ile sona erdi[] tüm dosya oluşur. Ne yazık ki, istemeden tutulur bir başvuru için tüm dizi için birkaç satır tuttum için daha uzun bir süre daha işlem dosya - zorla kullanın new String()
için bir çözüm değil.
Bunu yapmak için sadece uygulama agnostik yoludur:
small=new String(huge.substring(10,20).toCharArray());
Ne yazık ki bu dizi iki kez, bir kez Dize kurucu toCharArray()
ve bir kez kopyalamak gerekir.
Orada gerekli bir şekilde belgelenmiş için yeni bir String kopyalayarak karakter mevcut; veya belgeleri String(String)
ihtiyaçları için geliştirilmiş yapmak için daha fazla açık (orada bir ima var, ama oldukça muğlak ve yoruma açık olan).
Doktor Durumu yok Varsayarak hatadır
Gelecek olan yorumları, yanıt olarak, new String()
Apache Harmony uygulaması nasıl olduğunu görün:
public String(String string) {
value = string.value;
offset = string.offset;
count = string.count;
}
Doğru, alttaki dizinin kopyası var. Ve henüz, hala (Java 7) Dize belgeleri, bu işe uygun:
Başlatır yeni oluşturulan bir Dize bağımsız değişken karakter dizisini temsil eder, böylece nesne; başka bir deyişle, yeni oluşturulan string değişkeni string bir kopyasıdır. Orijinal açık bir kopya gerekli olmadığı sürece, bu oluşturucu kullanın Dizeleri değişmez olduğundan gereksizdir.
En önemli parça olmak "argümanın kopyasıstring"; bir şey ifade etmiyor "değişkeni dize kopyalayın ve alttaki karakter dizisi dize destekleyici".
Bu program için dikkatli olunbelgelerdeğilbiruygulama.
Java dize havuzu ne olduğunu ve nasıl ...
Bölünmüş Yeni Satır Dize Java...
Nereden "UTF-8" Java dize ha...
Kullanarak daha büyük bir dize Düzenli...
Amaç &Java derleyicisi quot;ifade"...