2009-10-23 2 views
1

В моем классе у меня есть метод, который возвращает такой массив.Возвращаемый массив из метода

double arrValues[] = ClassX.getValues(); 

Интересно, влияет ли размер массива на производительность. Есть ли операция копирования для arrValues ​​[] или это только возврат ссылки?

+0

Ваш статический метод действительно должен возвращать новую копию массива (если, возможно, если она равна нулю). –

ответ

3

В Java типы объектов возвращаются ссылкой, а примитивные типы возвращаются значением. Массивы представляют собой полномасштабные объекты на Java. Поэтому в вашем примере массив возвращается по ссылке и копия не создается.

+0

+1 для _why_ это ссылка, а не просто указание, что это ссылка –

3

Это только ссылка (как и все, кроме основных типов long, int, short, ...) в java - единственная ссылка).

3

Нет информации о стоимости построения массива (насколько это зависит от размера неизвестно).

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

+0

В отсутствие аппаратной поддержки и при условии хорошей GC, амортизированная стоимость распределения массива N слов - это запись в память O (N), необходимая для ее нулевого значения. –

+0

Думаю, я знаю, что вы имеете в виду, и я не согласен. Однако мы не знаем, что делает реализация getValues ​​(). «Стоимость», о которой я говорил, не касалась стоимости выполнения «нового массива [X]», а скорее затрат на вычисление _values_, которые попадают в массив. Как это весы ... Я не знаю. Однако, возможно, это не вопрос, который задает OP ... –

+0

getValues ​​() возвращает массив, который уже сконструирован ранее. Я хотел спросить только о стоимости возврата массива. – penguru

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