2013-05-19 54 views
0

我有一段代碼:的foreach,使新對象給空

public class Main { 
    static String strings[]; 

    public static void main(String[] args) { 
     strings = new String[10]; 
     for (String s : strings) { 
      s= new String("test"); 
     } 

     for (String s : strings) { 
      System.out.println(s); 
     } 
    } 

} 

爲什麼所有的弦仍然含有的而不是「測試」無效?

回答

6

你增強for語句(for-each循環)等同於:

T[] a = strings; 
for (int i = 0; i < a.length; i++) { 
    String s = a[i]; 
    s = new String("test"); 
} 

所以你的問題是類同這種情況下:

String a = null; 
String b = a; 
b = new String("test"); 
System.out.println(a); // null 
1
public class Main { 
    static String strings[]; 

    public static void main(String[] args) { 
     strings = new String[10]; 
     for (int i = 0; i < strings.length; ++i) { 
      strings[i] = new String("test"); 
     } 

     for (String s : strings) { 
      System.out.println(s); 
     } 
    } 

} 
1

要打印 「測試」,試試這個:

public class Main {static String string [];

public static void main(String[] args) { 
    strings = new String[10]; 
    for (int i=0; i<strings.length(); i++) {  
     strings[i]= new String("test"); 
    } 

    for (String s : strings) { 
     System.out.println(s); 
    } 
} 

}

-1

禁止,以便爲迭代陣列分配的for-each循環。

+0

不!這是允許的! – johnchen902

+0

您不能在java中的for-each循環中進行賦值。如果你不相信我測試它。 char [] c1 = {'T','e','s','t'}; (char x:c1)x ='p'的 ; System.out.println(c1);它不會工作。您可以使用方法yes,但不能分配新元素。 – pad

+0

雖然它不會更改數組,但它是允許的:[它在IDEONE中編譯](http://ideone.com/RF2vDK) – johnchen902