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

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • Google Analytics

    Google Analy

    25 ŞUBAT 2008
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007