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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
❓ Какова длина строки с одним эмодзи?

Java 21. В строке один эмодзи 😀. Что выведет код?

class Demo {
public static void main(String[] args) {
String text = "\uD83D\uDE00";

System.out.println(
text.length() + " " +
text.codePointCount(0, text.length())
);
}
}


👾 — 1 1
👍 — 2 2
🥰 — 2 1
⚡️ — 4 1

Ответ: 🥰 — 2 1.

Метод length() считает кодовые единицы UTF-16. Для этого эмодзи нужны две такие единицы — суррогатная пара. Метод codePointCount считает кодовые точки, поэтому возвращает 1. У составных эмодзи кодовых точек может быть несколько.

Документация: длина строки и кодовые точки

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

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2
❓ Почему double не сохранил дробную часть?

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

class Demo {
public static void main(String[] args) {
int first = 5;
int second = 2;

double a = first / second;
double b = (double) first / second;

System.out.println(a + " " + b);
}
}


👾 — 2.5 2.5
👍 — 2.0 2.0
🥰 — 2.5 2.0
⚡️ — 2.0 2.5

Ответ: ⚡️ — 2.0 2.5.

В первом выражении оба операнда имеют тип int. Деление даёт 2, и только затем результат преобразуется в double. Во втором выражении приведение происходит до деления, поэтому оно выполняется с плавающей точкой.

Документация: оператор деления

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

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡1
❓ Что увидит метод наследника во время работы конструктора родителя?

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

class Base {
Base() {
show();
}

void show() {}
}

class Child extends Base {
int value = 7;

@Override
void show() {
System.out.print(value + " ");
}
}

class Demo {
public static void main(String[] args) {
var item = new Child();
System.out.println(item.value);
}
}


👾 — 0 7
👍 — 7 7
🥰 — Только 7
⚡️ — Ошибка компиляции

Ответ: 👾 — 0 7.

Конструктор Base вызывает переопределённый метод
Child.show. Но инициализатор value = 7 ещё не выполнялся: поле пока содержит стандартный ноль. После завершения конструктора родителя поле получает 7.

Документация: порядок инициализации объекта

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

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👾1
👀 Можно ли записать число в String[] через ссылку Object[]?

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

class Main {
public static void main(String[] args) {
Object[] values = new String[2];
values[0] = "Java";
values[1] = 42;

System.out.println(values[1]);
}
}


👾 — Выведет 42
👍 — Выведет строку "42"
🥰 — Выбросит ArrayStoreException
⚡️ — Код не скомпилируется

Ответ: 🥰 — выбросит ArrayStoreException.

Переменная имеет тип Object[], поэтому компилятор разрешает присвоить число. Сам массив создан как String[]: при записи JVM проверяет тип элемента. Строка проходит проверку, Integer — вызывает исключение. До println выполнение не дойдёт.

Документация: проверка типа при записи в массив.

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

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6👾1
👀 Добавит ли 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