SORU
24 Aralık 2008, ÇARŞAMBA


İ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
24 Aralık 2008, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • ETrade Supply

    ETrade Suppl

    23 Temmuz 2011
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009