Авторские Материалы о событиях в Израиле на Ближнем Востоке и в мире

IsraMir.com - Израильская журналистика

Default color brown color green color red color blue color
Вы сейчас тут: Новости arrow Техотдел arrow Свет ученья arrow Клонирование массивов
Skip to content
Клонирование массивов Версия для печати Отправить на e-mail
Saturday, 08 April 2006 | Зэев Фрайман для раздела Ученье – свет
Клонированиемассивовjavaisramir.comРабота с массивами – тема сама по себе очень интересная, чрезвычайно полезная в дидактическом отношении; именно поэтому работа с массивами всегда занимает одно из самых центральных мест в школьном курсе. 
Причем в разных языках есть свои не просто особенности: подходы. Так было в PASCAL'е, так будет, несомненно, и в Java.
 
Итак, любой массив может быть клонирован. В этом разделе хотелось бы рассмотреть особенности, возникающие из-за того, что Object.clone() копирует только один объект.
 
Рассмотрим пример:
 
int a[]={1, 2, 3};
int b[]=(int[])a.clone();
a[0]=0;
System.out.println(b[0]);
 
Результатом будет единица, что вполне очевидно, так как весь массив представлен одним объектом, который не будет зависеть от своей копии. Усложняем пример:
 
int a[][]={{1, 2}, {3}};
int b[][]=(int[][]) a.clone();
 
if (...) {
   // первый вариант:
   a[0]=new int[]{0};
   System.out.println(b[0][0]);
} else {
   // второй вариант:
   a[0][0]=0;
   System.out.println(b[0][0]);
}
 
Разберем, что будет происходить в этих двух случаях. Начнем с того, что в первой строке создается двухмерный массив, состоящий из двух одномерных. Итого три объекта. Затем, на следующей строке при клонировании будет создан новый двухмерный массив, содержащий ссылки на те же самые одномерные массивы.
 
Теперь несложно предсказать результат обоих вариантов. В первом случае в исходном массиве меняется ссылка, хранящаяся в первом элементе, что не принесет никаких изменений для клонированного объекта. На консоли появится 1.
 
Во втором случае модифицируется существующий массив, что скажется на обоих двухмерных массивах. На консоли появится 0.
 
Обратите внимание, что если из примера убрать условие if-else, так, чтобы отрабатывал первый вариант, а затем второй, то результатом будет опять 1, поскольку в части второго варианта модифицироваться будет уже новый массив, порожденный в части первого варианта.
 
Таким образом, в Java предоставляется мощный, эффективный и гибкий механизм клонирования, который легко применять и модифицировать под конкретные нужды. Особенное внимание должно уделяться копированию объектных полей, которые по умолчанию копируются только по ссылке.
 
Источник – здесь
 
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:


Автотранслитерация: выключена

Защитный код

Powered by jComments