Как работает эта операция присваивания? - PullRequest
0 голосов
/ 06 июля 2011

Я столкнулся с чем-то новым, что мне действительно было трудно понять. Вот что я сделал, и он прекрасно работает ..

    Vector<String[]> v = new Vector<String[]>();
    v.add(s);

    String[][] s1 = new String[v.size][]
    v.toArray(s1);

Мой вопрос: как это работает, хотя метод toArray () принимает только 1-D массив в качестве аргумента? Я не очень стар для программирования на Java, поэтому ищу объяснение ..

Заранее спасибо ..

Ответы [ 4 ]

5 голосов
/ 06 июля 2011

В Java только действительно одномерные массивы - где он выглядит как будто у вас есть многомерный массив, на самом деле это просто массив массивов.

Так что, если мы проигнорируем тот факт, что String [] сам по себе является массивом, и везде заменим его на StringArray, мы получим следующий код:

Vector<StringArray> v = new Vector<StringArray>();
v.add(s);

StringArray[] s1 = new StringArray[v.size()];
v.toArray(s1);

Теперь это не выглядит так странно, право?s1 - это массив строковых массивов, а v - это вектор строковых массивов.v.toArray() принимает массив строковых массивов в качестве параметра, поэтому мы можем использовать s1 в качестве аргумента.

1 голос
/ 06 июля 2011

toArray () принимает одномерный массив объектов.

Массив строк - это объект.

s1 - массив строковых массивов.

QED

1 голос
/ 06 июля 2011

Все просто: v - это вектор 1-D массивов, toArray возвращает 1-D массив любых элементов в векторе (в данном случае 1-D - массивы). Результатом является одномерный массив одномерных массивов, более известный как двумерный массив.

0 голосов
/ 06 июля 2011

Аргумент обрабатывает «String [] []» как «одномерный массив» объектов «String []».

В этом случае Vector.toArray (T [] a) принимает массив T. Давайте заменим универсальный T на тип «String []» (обратите внимание, что String [] является объектом). Таким образом, это означает, что Vector.toArray (String [] [] a) принимает String [] [] в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...