русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразование типов для массивов


Дата добавления: 2015-06-12; просмотров: 700; Нарушение авторских прав


Теперь, когда массив введен как полноценный тип данных в Java. рассмотрим, какое влияние он окажет на преобразование типов.

Ранее подробно рассматривались переходы между примитивными и обычными (не являющимися массивами) ссылочными типами. Хотя мас­сивы являются объектными типами, их также будет полезно разделить по базовому типу на две группы - основанные на примитивном или ссылоч­ном типе.

Имейте в виду, что переходы между массивами и примитивными ти­пами являются запрещенными. Преобразования между массивами и другими объектными типами возможны только для класса Object и интерфейсов Cloneable и Serializable., Массив всегда можно привести к этим W типам, обратный же переход является сужением и должен производиться явным образом по усмотрению разработчика. Таким образом, интерес представляют только переходы между разными типами массивов.

Известно, что массив, основанный на примитивном типе, принципиально следует преобразовать к типу массива, основанному на ссылочном типе, и наоборот.

Пока не будем останавливаться на этом подробно, однако заметим, д-Q преобразования между типами массивов, основанных на различных примитивных типах, невозможны ни при каких условиях.

:. Для ссылочных же типов такого строгого правила нет. Например, если создать экземпляр массива, основанного на типе Child, то ссылку на ngjo можно привести к типу массива, основанного на типе Parent.

Child с[] = new Child[3]; Parent p[] = с;

Вообще, существует универсальное правило: массив, основанный на лице А, можно привести к массиву, основанному на типе В, если сам тип А Приводится к типу В.

^•'' II если допустимо такое приведение: Bb = (B)newA();

// то допустимо и приведение массивов: Bb[]=(B[])newA[3];

Применяя это правило рекурсивно, можно преобразовывать много­мерные массивы. Например, массив Child[][] можно привести к Parent[][], так как их базовые типы приводимы (Child[] кParent[]) также на Основе этого правила (поскольку базовые типы Child и Parent приво­димы в силу правил наследования).



Как обычно, расширения можно проводить неявно (как в предыдущем примере), а сужения — только явным приведением.

^ Вернемся к массивам, основанным на примитивном типе. Невозможно их участия в преобразованиях типов связана, конечно, с различиями простыми и ссылочными типами данных. Поскольку элементами объектных массивов являются ссылки, они легко могут участвовать в при­чини. Напротив, элементы простых типов действительно хранят числовые булевские значения. Предположим, такое преобразование осуществимо:

// пример вызовет ошибку компиляции

byte Ь[]={1. 2,3};

intl[]=b;

в таком случае, элементы Ь[0] и i[0] хранили бы значения разных типов. Стало быть, преобразование потребовало бы копирования с одновременным преобразованием типа всех элементов исходного массива, в результате был бы создан новый массив, элементы которого равнялись бы по значению элементам исходного массива.

Но преобразование типа не может порождать новые объекты. Такие операции должны выполняться только явным образом с применением ключевого слова new. По этой причине преобразования типов массивов, основанных на примитивных типах, запрещены.

Если же копирование элементов действительно требуется, то нужно сначала создать новый массив, а затем воспользоваться стандартной функцией System.аггауСоруО, которая эффективно выполняет копирование элементов одного массива в другой.



<== предыдущая лекция | следующая лекция ==>
Класс массива | Ошибка ArrayStoreException


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.745 сек.