Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кпп.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
238.24 Кб
Скачать

Лекция 3. Переменные и типы данных. Переменные и типы данных.

Алфавит языка. Идентификаторы. Знаки операций. Выражения. Константы. Типы данных. Объявление и инициализация переменных. Строки. Инициализация строк. Функции работы со строками.

 

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

Разница между ссылочными типами и примитивными в том, что примитивные типы занимают ячейку памяти своим значением, а ссылочные типы содержат в своей ячейке памяти не само значение, а ссылку на другую ячейку, где находится значение.

 То есть, пользуясь терминологией С++, в ячейке памяти, связанной с переменной примитивного типа содержится само значение переменной, а в ячейке памяти ссылочного типа лежит указатель на другую ячейку, где лежит значение. Это приводит к тому, что при взаимном присвоении переменных простых типов, они остаются независимыми друг от друга, а при взаимном присвоении переменных ссылочных типов, они начинают указывать на одну и ту же область памяти!

Следовательно, при написании программ на java, следует обращать внимание, что чему присваиваешь.

 Приведу простой пример.

 Int a = 1;

Int b = 0;

 a = b;

b = 3;

System.out.println(“a=”+a);

System.out.println(“b=”+b);

 На экране будет напечатано:

-------------------

a = 0

b = 3

 То есть, значение переменной а изменило свое значение на значение b, но когда мы поменяли значение b, это никак не отразилось на а, поскольку переменные а и b ссылаются на разные ячейки памяти. Каждая на свою, и операция присвоения

 a = b

 ничего здесь не изменила.

Теперь проведем ту же манипуляцию со ссылочным типом.

 String[] a = new String[1];

String[] b = new String[1];

 a[0] = “I’m a!”;

b[0] = “I’m b!”;

 a = b;

 b[0] = “I’m new b!!!”;

            System.out.println(“a=”+a[0]);

            System.out.println(“b=”+b[0]);

 На экране будет напечатано:

-------------------

a = I’m new b!!!

b = I’m new b!!!

 Произошло это потому, что после присвоения переменные a и b фактически стали ссылаться на одну и ту же ячейку памяти, а конкретно – на ту ячейку, которая первоначально была выделена для переменной b.

В java ссылка на ячейку памяти может быть пустой, то есть не указывать ни на какое конкретное значение. Для таких случаев предусмотрено специальное ключевое слово «null». Его можно присвоить любой переменной ссылочного типа.

 String a = null;

Ссылки в java по сути являются указателями, совершенно аналогичными указателям С++, с той лишь разницей, что получить этот указатель в числовом виде и изменять его произвольно как в С++, в java не разрешено. Этим обеспечивается гарантированная защита от случайной порчи указателя и ошибок доступа к памяти.