В Java есть классы-обёртки для примитивов: Integer, Double, Boolean и др. Они нужны, когда требуется объект: например, в коллекциях (List), при использовании null, в обобщениях и некоторых API. Обёртки содержат полезные методы: valueOf(), parseInt(), константы MIN_VALUE/MAX_VALUE, сравнение через compareTo(). Пример: Integer x = Integer.valueOf("42"); int y = Integer.parseInt("42");. В этом практическом тренажёре — задания по использованию обёрток в java задачах и разбору типичных ошибок.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Разложить: примитивы vs обёртки
Перед вами список элементов, представляющих типы данных в Java. Ваша задача — распределить каждый элемент по одной из двух категорий: «примитивные типы» или «классы-обёртки». Примитивные типы — это базовые типы данных языка (например, int, char), а классы-обёртки — это соответствующие им объектные классы из стандартной библиотеки Java (например, Integer, Character). Обратите внимание, что каждый элемент однозначно относится только к одной категории.
intIntegerdoubleDoublebooleanBooleancharCharacterlongLongfloatFloatbyteByte2. Выбрать тип для коллекции
В данном фрагменте кода объявляются три переменные, которые затем добавляются в список. Выберите из выпадающего списка подходящие классы-обертки для каждой переменной, чтобы код успешно компилировался и выполнялся. Обратите внимание на тип литералов (целое число, число с плавающей точкой, целое число с суффиксом L).
input1S num1 = 10;
input2S num2 = 3.14;
input3S num3 = 100L;
List<Number> list = new ArrayList<>();
list.add(num1);
list.add(num2);
list.add(num3);3. Заполнить вызовы parseXxx и valueOf
В этом задании вам предстоит заполнить пропуски в коде, который демонстрирует преобразование строк в числа с использованием классов-обёрток Integer и Double. Код получает числовые значения из строк двумя способами: через статические методы parseXxx и через метод valueOf. Вам нужно вписать имена методов и строковые литералы так, чтобы программа корректно компилировалась и выводила ожидаемый результат.
public class Main {
public static void main(String[] args) {
String strInt = "123";
String strDouble = "45.67";
// Преобразование строки в int с помощью parseInt
int intValue = Integer.input1S(strInt);
// Преобразование строки в double с помощью parseDouble
double doubleValue = Double.input2S(strDouble);
// Получение объекта Integer из строки
Integer integerObj = Integer.input3S(strInt);
// Получение объекта Double из строки
Double doubleObj = Double.input4S(input5S);
System.out.println("intValue: " + intValue);
System.out.println("doubleValue: " + doubleValue);
System.out.println("integerObj: " + integerObj);
System.out.println("doubleObj: " + doubleObj);
}
}4. Исправить падение при работе с null
В данном фрагменте кода на Java используется класс-обертка Integer. При выполнении программы может возникнуть исключение NullPointerException из-за попытки распаковки null-значения в примитивный тип. Найдите строку, содержащую ошибку, и исправьте её, обеспечив безопасную обработку возможного null-значения. Исправление должно быть локальным и однозначным.
public class Main { public static void main(String[] args) { Integer a = 10; Integer b = null; Integer c = 20; int sum = a + b + c; System.out.println("Sum: " + sum); }}5. Что вернёт == и equals у Integer
Проанализируйте приведённый код на Java. Обратите внимание на способы создания объектов Integer: с помощью оператора new, метода valueOf и автоупаковки. Учтите, что значение 1000 выходит за пределы стандартного кэша целых чисел (-128..127). Выберите последовательность логических значений (true/false), которая будет выведена в результате выполнения кода.
public class Main {
public static void main(String[] args) {
Integer a = new Integer(1000);
Integer b = Integer.valueOf(1000);
Integer c = 1000;
Integer d = new Integer(1000);
System.out.println("a == b: " + (a == b));
System.out.println("a == c: " + (a == c));
System.out.println("a == d: " + (a == d));
System.out.println("a.equals(b): " + a.equals(b));
System.out.println("a.equals(c): " + a.equals(c));
System.out.println("a.equals(d): " + a.equals(d));
}
}6. Отметить вызовы методов обёрток
Внимательно изучите приведённый фрагмент кода на Java. Ваша задача — найти и отметить все места, где вызываются методы классов-обёрток (например, Integer, Double). Обратите внимание на такие методы, как parseInt(), valueOf(), compareTo(), toString(). Не отмечайте примитивные операции (например, арифметические), объявления переменных или вызовы методов, не относящихся к классам-обёрткам.
public class WrapperDemo {
public static void main(String[] args) {
int primitiveInt = 42;
Integer wrappedInt = {{Integer.valueOf(primitiveInt)~|~t1}};
String strNumber = "123";
int parsed = {{Integer.parseInt(strNumber)~|~t2}};
Double price = {{Double.valueOf(99.99)~|~t3}};
String priceStr = {{price.toString()~|~t4}};
Integer a = 10;
Integer b = 20;
int comparison = {{a.compareTo(b)~|~t5}};
double sum = primitiveInt + {{parsed~|~t6}};
System.out.println("Result: " + priceStr);
}
}