2015-03-22 6 views
3

Я использую цикл foreach для итерации по пустому массиву и заполнения его объектами. «Случай» - это класс с несколькими методами и атрибутами.Почему мой метод возвращает массив нулей?

Мой код выглядит следующим образом:

public class Test { 

private Case [] list = new Case[5]; 

public Case [] test(){ 
    for(Case myCase : list){ 
     myCase = new Case(); 
    } 

    return list; //This list contains 5 nulls, but should contain five "Case" objects. 
} 

public static void main(String[] args){ 
    Test myTest = new Test(); 
    myTest.test(); 
}} 

список, который возвращается из моего метода содержит 5 аннулирует, когда я ожидаю, что он содержит 5 инстанцированы «Case» объекты. Я подозреваю, что это может быть какая-то проблема видимости, но я не могу понять это.

ответ

9

Переменная, используемая в цикле for-each, является лишь ссылкой на текущее значение элемента массива. Присвоение этой переменной не влияет на значения, хранящиеся в массиве. Вы должны использовать цикл как это:

for (int i = 0; i < list.length; i++) { 
    list[i] = new Case(); 
} 
+0

Correct. Если вам интересно, как для каждого цикла работает в java, проверьте эту ссылку. (http://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work) –

+0

Спасибо;) Это прояснилось. – Magnus

0

Кроме того, Вам не нужно явно возвращать список из метода испытаний(), так как это поле в MyTest.

Это будет работать прекрасно,

public void test(){ 
      for(int i=0;i<5;i++){ 
       this.list[i] = new Case(); 
      } 
     } 
Смежные вопросы