2016-04-04 4 views
3

gibi döngü için geliştirilmiş? Sınıfta, Geliştirilmiş İçin döngülerin aslında temeldeki diziyi değiştirmediğini, ancak bazı özel durumların olduğunu öğrendik. Bunun bellek yönetimi ile ilgili bir şey olduğunu düşünüyorum, ama emin değilim. Birisi bunu anlamama yardımcı olabilir mi?Geliştirilmiş bir forma ne zaman bir Temel Verileri değiştirir? Bu aslında dizi A'yı etkileyecek</p> <pre><code>String[] a = {"dog", "cat", "turtle"}; for (String s : a) { out.println("String: " + s); s = in.readLine("New String? "); } </code></pre> <p>: bir In

cevap

2

referansı'u değiştirmeden değeri değiştirebilirsiniz; örneğin bir StringBuilder karakterlerin değişken dizisidir ve bu aslında dizi A'yı etkileyecek

StringBuilder[] a = { new StringBuilder("dog"), new StringBuilder("cat"), 
     new StringBuilder("turtle") }; 

for (StringBuilder s : a) { 
    out.println("String: " + s); 
    s.setLength(0); // <-- clear the contents 
    s.append(in.readLine("New String? ")); // <-- add the new content 
} 
+0

Bu 'a' hiç değişmez. Aslında, 'final' ilan edebilir ve aynı sonucu alabilirsiniz. – Amit

+0

Biliyorum, dizinin başvurduğu StringBuilder (ler) in içerdiği değerleri değiştirir. ['For-each' loop] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html) dokümantasyonu, * gerek duyduğunuz döngüler için kullanılamayacağını belirtir. Bir liste veya dizideki öğeleri değiştirirken değiştirin. * Sadece OP için * olası * olanı açıklıyorum. –

2

gibi bir şey yapabilir?

Hiç

Sizin değil kodun herhangi bir bölümünde a şey yapıyor. Eğer kudreti öğretilmiş Ne

Eğer bir kap (dizi veya diğer) üyelerini mutasyona olabilir.

Bunun ne anlama geldiğini tahmin etmek için, rotasını yapan bir treniniz olduğunu ve her arabanın dizininizde bir öğe olduğunu varsayalım. "Trene müsaade edemezsin" (her istasyonda aynı arabaya sahip olacak), ama "arabaları değiştirebilirsin" (insanlar her durakta arabalara biner ve giderler).

+0

Sanırım sormaya çalıştığım şey, neden s = in.readLine ("New String?"); A'daki ilgili öğeyi değiştirmeyin? Ayrıca "bir konteynerin üyelerini değiştirebilirsin" diyerek neyi kastettiğinizi açıklayabilir misiniz? – gregyjames

İlgili konular