2016-10-20 2 views
-2

Я пытаюсь напечатать размер массива с помощью метода .length. Однако, в конце концов, это всегда возвращается 1, а не 4.Длина массива, возвращающая неправильный номер?

Вот мой код:

int size = 4; 
ArrayList<String> testArr = new ArrayList<String>(); 
String [] test = null; 

for (int i = 0; i < size; i++) { 
    testArr.add("test"); 
    test = testArr.toArray(new String[0]); 
} 

System.out.println(test.length); // returns 1 
+6

Этот код фактически печатает 4. – Eran

+0

, что это версия Java, что вы используете? –

+1

Я не понимаю, в чем проблема, но зачем вы преобразовываете arraylist в массив: у arraylist также есть метод size() ... – Lucurious

ответ

1

Нет проблем

Вы код действительно вернет 4, как вы ожидали, а не 1, как вы заявил.

Я принял Ваш код как есть, добавив дополнительно println и изменяющий остальные println.

int size = 4; 
ArrayList<String> testArr = new ArrayList<String>(); 
String[] test = null; 

for (int i = 0 ; i < size ; i ++) { 
    testArr.add ("test"); 
    test = testArr.toArray (new String[ 0 ]); 
    System.out.println ("i: " + i + " | test: " + Arrays.toString (test)); 
} 

System.out.println ("test.length: " + test.length); 

я: 0 | тест: [тест]

i: 1 | тест: [тест, тест]

i: 2 | тест: [тест, тест, тест]

i: 3 | Тест: [тест, тест, тест, тест]

test.length: 4

Обязательно прочитайте класс документ, чтобы понять поведение этой команды:

ArrayList::toArray(array)

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

Если список соответствует указанному массиву с запасным номером (т. Е. Массив имеет больше элементов, чем список), элемент в массиве сразу же после окончания коллекции устанавливается в нуль. (Это полезно при определении длины списка, только если абонент знает, что список не содержит нулевых элементов.)

Смежные вопросы