?

Log in

No account? Create an account
В мире нет ничего простого
Август 21, 2011
05:37 pm

[Ссылка]

Previous Entry Поделиться Next Entry

Эта штука меня давно бесила в Java, и то, что на самом деле решение имеется, зело радует. Суть в следующем: когда в Java мы создаем массив, сразу при объявлении его можно инициализировать не только нулями - просто, скажем, так:

int[] a = new int[8];

Можно инициализировать его и произвольными значениями:

int[] a = {1, 3, 85, 4};

Однако при попытке сделать то же самое с уже существующей переменной массива нас ждет неудача:

int [] b;
b = {1, 3, 85, 4};

Такой код ошибочен, это выявится еще на этапе написания средствами IDE или - если пользоваться голым JDK - на этапе компиляции. Из-за этого мне нередко случалось создавать лишние переменные, чтобы удобно было их инициализировать, что, разумеется, выглядит нелепо. Так вот, на самом деле инициализировать таким же перечнем существующую переменную массива можно, просто синтаксис там несколько другой:

int [] b;
b = new int[] {1, 3, 85, 4};

Этот код работает корректно. Не представляю, зачем сделано такое различие в синтаксисе для новых и существующих переменных, но если знать - вполне удобно. Проблема в том, что в книгах я об этом ничего не встречал.

Tags: ,

(4 комментария | Оставить комментарий)

Comments
 
[User Picture]
From:alsterellie
Date:Август 21, 2011 07:18 pm
(Link)
О-о-о! Спасибо. Реально несколько раз бесило (казавшееся) отсутствие такой возможности, приходилось инициализировать в столбик. :)
[User Picture]
From:whitelynx
Date:Август 21, 2011 08:49 pm
(Link)
На самом деле "инициализация в столбик" (если я правильно понял, что имеется в виду) это не тоже самое.
Ну то есть код
a[1] = 1;
a[2] = 2;
a[3] = 3;
работает с существующим массивом a
Код
a = new int[] {1, 2, 3};
создает новый массив и присваивает указатель на него переменной a.
[User Picture]
From:whitelynx
Date:Август 21, 2011 08:55 pm
(Link)
Я бы, кстати, если бы меня спросили, не факт что правильно бы ответил и про синтаксис в первом случае, и про синтаксис во втором. Спасибо тебе!

Возможно, создатели языка решили, что конструкция типа
b = {1, 3, 85, 4};
недостаточно четко обозначает тот факт, что создается новый массив. Глядя на такую строчку можно подумать, что она, например, обозначает инициализацию первых четырех элементов существующего массива указанными значениями.
[User Picture]
From:bukky_boogwin
Date:Сентябрь 2, 2011 04:31 am
(Link)
Кстати, да, вероятно. Но странно, что другой вариант настолько малоизвестен... штука-то нужная.
Разработано LiveJournal.com