SORU
15 Mayıs 2012, Salı


Nasıl Java Dizeleri kopyalamak gerekir?

    String s = "hello";
    String backup_of_s = s;
    s = "bye";

Bu noktada, yedekleme değişkeni hala orijinal değerini içeriyor "" (bu Dizenin değişmezliğini tanıdı hakkı yüzünden mi?). Merhaba

Ama gerçekten öylegüvenlibu yöntem ile Dizeleri kopyalamak için tabi ki güvenli değil normal değişken nesneleri kopyalamak için) veya daha iyi yazmak mı? :

    String s = "hello";
    String backup_of_s = new String(s);
    s = "bye";

Diğer bir deyişle, fark (eğer varsa) bu iki parçacıkları arasında ne var?


EDİT - ilk parçacığı güvenli olmasının nedeni:

Bana biraz daha ayrıntılı şeyler açıklamama izin ver, iyi cevaplar zaten verdiği bilgilere göre aslında 2 parçacıkları arasında performans farkı sorusu üzerinde duruldu)

Dizeleri Dize nesne olamaz sonrasında değiştirilmesi anlamına gelir Java değişmez. Bu nedenle,

String s = "hello"; yeni bir Dize örneği oluşturur ve s adresini atar (s örnek/nesne bir gönderme)

String backup_of_s = s; yeni bir değişken backup_of_s oluşturur ve bu nesneye başvuruyor yani şu anda s tarafından başvurulan başlatır.

Not: bu nesne değiştirilmeyecek Dize değişmezliğini tanıdı garanti: bizim yedek güvenlidir

NOT 2: Bu nesne en az bir değişken (backup_of_s) tarafından başvurulan olduğu sürece yok olmayacağını Java çöp toplama mekanizması garanti eder

Son olarak, s = "bye"; başka bir String örneği (çünkü değişmezliğini tanıdı, tek yolu budur) oluşturur, ve şimdi yeni bir nesne referansları olan s değişken değiştirir.

CEVAP
15 Mayıs 2012, Salı


Dizeleri değişmez olduğundan, her iki sürümü de güvenlidir. İkincisi, ancak, daha az verimli (ekstra bir nesne ve bazı durumlarda kopya karakter veri oluşturur).

Bu düşünceyle, ilk versiyonu tercih edilmelidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • Truc Minh

    Truc Minh

    23 Ocak 2011