Библиотека задач по Java | тесты, код, задания
5.58K subscribers
786 photos
9 videos
357 links
Задачи и тесты по Java для тренировки и обучения.

По рекламе: @tproger_sales_bot

Учиться у нас: clc.to/KV5NkA

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
👀 Добавит ли computeIfAbsent ключ, если функция вернула null?

Java 21. Что выведет код?

import java.util.HashMap;

class Main {
public static void main(String[] args) {
var cache = new HashMap<String, String>();

cache.computeIfAbsent("user", key -> null);

System.out.println(cache.containsKey("user"));

cache.computeIfAbsent("user", key -> "Ann");

System.out.println(cache.get("user"));
}
}


👾 — true, затем null
👍 — false, затем Ann
🥰 — true, затем Ann
⚡️ — Выбросит NullPointerException

Ответ: 👍 — false, затем Ann.

Если вычисляющая функция возвращает null, computeIfAbsent оставляет отсутствующий ключ без записи. При следующем вызове функция выполнится снова. Она вернёт "Ann", и это значение попадёт в map.

Документация: Map.computeIfAbsent.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
👀 Сколько частей вернёт split для строки с запятыми в конце?

Java 21. Что выведет код?

class Main {
public static void main(String[] args) {
String text = "A,B,,";

System.out.println(text.split(",").length);
System.out.println(text.split(",", -1).length);
}
}


👾 — 4, затем 4
👍 — 3, затем 4
🥰 — 2, затем 2
⚡️ — 2, затем 4

Ответ: ⚡️ — 2, затем 4.

Вызов split(",") удаляет пустые элементы в конце результата. Остаются "A" и "B".

Отрицательный limit сохраняет конечные пустые элементы: получатся "A", "B", "" и "". Это пригодится при разборе строк, где пустое последнее поле имеет значение.

Документация: String.split.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡4👍1
👀 Какую перегрузку метода выберет вызов с null?

Java 21. Что выведет код?

class Main {
static void show(Object value) {
System.out.println("Object");
}

static void show(String value) {
System.out.println("String");
}

public static void main(String[] args) {
show(null);
}
}


👾 — String
👍 — Object
🥰 — Выбросит NullPointerException
⚡️ — Код не скомпилируется из-за неоднозначности

Ответ: 👾 — String.

null подходит обоим параметрам. Компилятор выбирает наиболее конкретную подходящую перегрузку: String является подтипом Object.

Само по себе присваивание null параметру исключения не вызывает.

Документация: выбор наиболее конкретного метода.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡3👍3👾2
👀 Какой return сработает, если он есть и в try, и в finally?

Java 21. Что выведет код?

class Main {
static int result() {
try {
return 1;
} finally {
return 2;
}
}

public static void main(String[] args) {
System.out.println(result());
}
}


👾 — 1
👍 — 1 и 2
🥰 — 2
⚡️ — Код не скомпилируется

Ответ: 🥰 — 2.

После вычисления return 1 выполняется finally. Его return 2 заменяет уже подготовленный результат.

По той же причине return внутри finally способен скрыть исключение из try. Поэтому завершение метода лучше оставлять за пределами finally.

Документация: выполнение try-finally.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰4⚡1
👀 Почему −7 / 3 и Math.floorDiv(−7, 3) дают разные ответы?

Java 21. Что выведет код?

class Main {
public static void main(String[] args) {
System.out.println(-7 / 3);
System.out.println(Math.floorDiv(-7, 3));
}
}


👾 — −3, затем −3
👍 — −2, затем −3
🥰 — −2, затем −2
⚡️ — −3, затем −2

Ответ: 👍 — −2, затем −3.

Целочисленное деление через / отбрасывает дробную часть, двигаясь к нулю. Для −7 / 3 получается −2.

floorDiv округляет результат вниз, к отрицательной бесконечности. Поэтому он возвращает −3.

Документация: Math.floorDiv.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👀 Можно ли положить null в List.of?

Java 21. Что произойдёт при запуске?

import java.util.List;

class Main {
public static void main(String[] args) {
try {
var items = List.of("A", (String) null);
System.out.println(items.size());
} catch (NullPointerException e) {
System.out.println("null");
}
}
}


👾 — 2
👍 — 1
🥰 — null
⚡️ — Ошибка компиляции

Ответ: 🥰 — null.

List.of запрещает null среди элементов. Исключение возникает при создании списка, и catch печатает null. До вызова size выполнение не доходит.

Документация.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰4