Java Q&A



         

Массивы массивов


Перевод на русский © , 2000

Java Q&A

Когда и как следует использовать массивы массивов?

В Java все объекты обрабатываются с помощью ссылок. Объект может иметь несколько ссылок и ссылка может указывать на разные объекты в разные моменты времени. В этом смысле ссылки напоминают указатели C/C++ (правда, они не поддерживают операции с указателями, которые заменены в Java семантикой массивов). Давайте посмотрим на пример:

String s = new String( "Привет, мир" ); // s является ссылкой типа String, указывающей // на объект String со значением "Привет, мир" .

s= new String( "Guten Tag, Welt" ); // Та же ссылка типа String теперь указывает // на другой объект String; то есть, // одна и та же ссылка указывала на два // разных объекта (последовательно). // (Заметьте, что теперь у нас есть объект String // со значением "Привет, мир" на который нет ссылок; // теперь он подлежит удалению // сборщиком мусора)

String t; // t это ссылка типа String со значением null // (не указывает ни на один объект). // Если вы попробуете использовать t в этот момент, т.е. // напишете int len = t.length; вы получите // NullPointerException (лучше было бы сказать // NullReferenceException).

t = s; // Теперь ссылка типа String t указывает на тот же // объект, что и String ссылка s, // то есть объект со значением "Guten Tag, Welt". // Таким образом, мы получили две ссылки // на один объект (одновременно).

Массивы в Java это своеобразные объекты, хранят ли они примитивы (int, char, boolean, и т.д) или другие объекты. Это означает, что на массивы ссылаются, как на любые другие объекты с добавлением [] семантики агрегирование/разыменования. Например:

String [] sa; // sa это ссылка null // попытка доступа к sa.length приведет к NullPointerException.

sa = new String [2]; // sa уже не null, а указывает на определенный объект- // массив из двух ссылок null String. // sa.length теперь равна 2 // (sa[0] и sa[1] это две ссылки null String).




Содержание    Вперед