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
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
}
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).
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
Bu 'a' hiç değişmez. Aslında, 'final' ilan edebilir ve aynı sonucu alabilirsiniz. – Amit
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. –