Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Объявление двумерного массива java

#java #массивы


Друзья, помогите, пожалуйста, с таким вопросом. Встретил такой кусок кода в Java

public String saveComputingResult(int firstNumber, int secondNumber, String operation) {
    String[][] arr = new String[2][0]; //**
    arr[0] = new String[1]; //**
    arr[1] = new String[1]; //**
    arr[0][0] = getOperation(operation);
    arr[1][0] = Integer.toString(getComputingResult(firstNumber, secondNumber, operation));
    return arr[0][0] + " - " + arr[1][0];


Кто может пояснить выделенные комментарием //** строки? Объявляется двумерный массив
типа String, имеет две строки и....0!!! столбцов. Это как? Что это означает? В Шилдте
и Эккеле таких примеров нету, есть только примеры где размер массива указывается для
первого массива, так как это обязательно, а второй [] просто остается пустым, но что
означает если там 0 внутри? 
И что означают эти строки при этом?? 

arr[0] = new String[1];
arr[1] = new String[1];

    


Ответы

Ответ 1



Объявляется массив состоящий из двух массивов нулевой длины. То есть каждый элемент массива имеет указатель на физический адрес, где хранится массив нулевой длины. При объявлении: String[][] arr = new String[2][]; каждому элементу массива присвоено значение null вместо указателя на адрес, то есть: arr[0]=null; arr[1]=null; В вашем же случае: String[][] arr = new String[2][0]; тоже самое что: String[][] arr = new String[2][]; arr[0] = new String[0]; arr[1] = new String[0]; Массивы нулевой длины объявлены и хранятся в памяти, а arr[0] и arr[1] присвоены указатели на адреса в памяти.

Ответ 2



Согласно en-SO и здравому смыслу при записи String[][] arr = new String[2][0]; мы получаем массив из 2 массивов типа String с нулевой длинной. Далее в приведённом вами коде ячейки массива заполняются новыми массивами с одной ячейкой в каждой: arr[0] = new String[1]; arr[1] = new String[1]; При этом, т.к. ячейки не инициализированы, то if(arr[1][0]==null) System.out.println("NULL!!!111one"); выведет NULL!!!111one Таким образом, при последующем присваивании ячейкам элементов массива arr других массивов ставить им длину равную 0 (или любой другой цифре) смысла, в общем, не имеет.

Комментариев нет:

Отправить комментарий