Типы-обёртки в Java
Создайте ArrayList<Integer> с именем nums, вызовите nums.add(9);, затем nums.add(4);, и напечатайте nums.get(0). Скомпилируйте Crate.java и запустите java Crate. На экране должна быть одна строка: 9. В угловых скобках стоит Integer, не int. Хранить целые числа в списке через тип-обёртку — чтобы коллекция могла держать объекты — вот чему учит эта страница.
Почему списку нужен Integer
На странице iterating список держал слова String. ArrayList хранит объекты. Примитивный тип int — не объект. Тип-обёртка Integer — это объектная форма целого числа. Внутри угловых скобок вы пишете Integer. Когда вы вызываете add(9), Java может упаковать примитив 9 в Integer за вас на этой странице. Этого тихого boxing хватает для учебного файла.
Откройте Crate.java. Оставьте имя публичного класса Crate, чтобы оно совпадало с именем файла. Удалите остатки for (String t : tags), add’ы oak и pine, демо Lane и любой остаток HashSet или map. Также удалите любой Scanner или nextLine. Программа не должна ждать ввода с клавиатуры.
Близко к верху, над public class Crate, напишите:
import java.util.ArrayList;
Внутри main создайте список:
ArrayList<Integer> nums = new ArrayList<Integer>();
Не пишите ArrayList<int> — javac отвергает такую форму. Оставьте Integer с обеих сторон строки создания на этой странице. Затем добавьте два целых числа без кавычек:
nums.add(9);
nums.add(4);
Затем напишите:
System.out.println(nums.get(0));
Слот ноль хранит 9. Сохраните перед компиляцией.
import java.util.ArrayList;
public class Crate {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(9);
nums.add(4);
System.out.println(nums.get(0));
}
}
Из папки, где лежит Crate.java, выполните javac Crate.java. Когда скобки, фигурные скобки, угловые скобки и точки с запятой совпадают, javac не пишет своей строки. Затем выполните java Crate — не java Crate.java и не java Integer. Уберите окончание .java из команды запуска.
Программа должна напечатать одну строку и остановиться: 9. Она не должна просить вас печатать. Если терминал ждёт ввода с клавиатуры, в файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте создание ArrayList<Integer>, две строки add и System.out.println(nums.get(0));.
Пройдите запуск один раз. Java стартует с Crate.main. Список растёт двумя упакованными целыми. Вызов get(0) возвращает первый Integer. Строка печати пишет 9. Экран показывает 9. Больше ничего печататься не должно. Если видите oak или pine, ещё работает демо iterating из Lane — перейдите к java Crate. Если видите 4, вы по ошибке напечатали get(1); для учебного файла оставьте get(0). Если видите [9, 4], вы напечатали весь объект списка вместо слота ноль — для пути квиза оставьте println(nums.get(0)).
Если javac отвергает ArrayList<int>, смените скобки на Integer. Эта ошибка — весь смысл правила типа в этом уроке; исправьте скобки и скомпилируйте снова. Если напишете nums.add("9"); с кавычками, вы добавляете String, и javac откажет для ArrayList<Integer>. На этой странице оставляйте голые цифры. Если нет import, javac не найдёт ArrayList — поставьте import java.util.ArrayList; над классом. Написание Integer с большой I важно; integer в скобках не совпадёт с типом-обёрткой, который Java здесь ждёт.
Unbox в обычный int
Второе демо читает первое значение в примитивную переменную int, затем печатает эту переменную. Java распаковывает Integer за вас при этом присваивании.
import java.util.ArrayList;
public class Crate {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(9);
nums.add(4);
int n = nums.get(0);
System.out.println(n);
}
}
Компилируйте и запускайте так же. Экран по-прежнему показывает 9. Строка int n = nums.get(0); достаёт значение обёртки как обычный int. На этом пути новичка вам не нужно вызывать intValue(). Первый учебный файл оставьте в прямой форме println(nums.get(0)). Файл unbox покажет, что примитивная переменная может держать то, что список сохранил как Integer. Имя n оставьте точно как показано, чтобы строка печати оставалась короткой. Не смешивайте for-each по тегам String во втором файле — оставайтесь со списком чисел и одним присваиванием int.
Рядом
Короткая таблица держит правило типа ясным.
📊 int vs Integer for lists
| Piece | On this page |
|---|---|
| list type | ArrayList<Integer> |
| illegal | ArrayList<int> — not allowed |
| add | nums.add(9); — boxes to Integer |
| read | nums.get(0) prints 9; may unbox to int n |
Таблица только напоминание. Набранные куски, которые вы сохраняете, — это import, ArrayList<Integer>, два add и get(0). |
Сравнение со списками String и с одними примитивами
На странице iterating ArrayList<String> держал слова. Это всё ещё работает. Эта страница меняет тип элемента на Integer, чтобы целые числа могли сидеть в списке. Оставшийся for-each из Lane, который печатает oak и pine, — другой урок. Для этой страницы оставьте Crate и печатайте 9 из get(0).
Одиночный int x = 9; по-прежнему работает без всякого списка. Обёртки важны, когда API коллекций просит объектный тип в угловых скобках. Другие обёртки позже идут по той же идее — Double рядом с double, Boolean рядом с boolean — но эта страница держит Integer и int, чтобы экран оставался одним ясным числом. Сегодня не нужно запоминать каждое имя обёртки; один раз выучите шаблон с Integer рядом с int и запрещённой формой ArrayList<int>.
Когда рядом ещё лежат старые файлы Lane.java, оставьте их или удалите только если они путают, какой класс вы запускаете. Запустите java Crate после компиляции списка-обёртки из этого урока. Путь Collections заканчивается здесь этим ясным 9 на экране, прежде чем курс повернёт к ошибкам и файлам.
Что остаётся для exceptions
Эта страница закрывает потребность модуля Collections в обёртке для целых чисел в списке. Следующий модуль открывает ошибки через exceptions. Оставайтесь здесь на этой странице с ArrayList<Integer> и get(0). Не делайте try или catch обязательными на этой странице.
Перед exceptions
Вы можете импортировать java.util.ArrayList, создать ArrayList<Integer> nums, добавить 9 и 4 и напечатать nums.get(0), чтобы увидеть 9. Также можно сделать unbox в int n. Скомпилируйте Crate.java и запустите java Crate. Тип-обёртка позволил списку держать целые числа. Следующая страница — exceptions, где программа сигнализирует о проблемах и обрабатывает их.
Оставьте Integer в угловых скобках. Оставьте добавления чисел без кавычек. Оставьте get(0) для учебного экрана 9. Эти три привычки — контрольная точка перед движением дальше. Когда после чистой компиляции Crate.java экран показывает 9 из списка Integer, обёртки сделали своё дело в этом уроке, и вы готовы к следующей теме.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху