Строки

Вопрос 1

Что будет, если попытаться выполнить следующую программу?

String input = "Hello";System.out.println(input.substring(0, 6));

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

б. Программа выбросит исключение во время выполнения

Программа выбросит java.lang.StringIndexOutOfBoundsException: begin 0, end 6, length 5.

Рассчитывать на то, что метод substring(int beginIndex, int endIndex) сам "увидит", что символов в строке меньше, чем endIndex и оставит их все — нельзя. Эту проверку нужно делать самостоятельно.

Вопрос 2

Что будет выведено на консоль в результате работы следующей программы?

String s1 = "Hello, World!";String s2 = "Hello, " + "World!";
System.out.println(s1 == s2);

а. true
б. false

а. true

Выражение "Hello, " + "World!"; является так называемым константным выражением и вычисляется во время компиляции. Таким образом уже в момент компиляции обоим переменным будет присвоено одинаковое значение "Hello, World!".

Поскольку строки в Java в момент компиляции помещаются в пул строк, то во время исполнения программы одинаковые строки всегда являются одним и тем же объектом, если взяты из пула. Таким образом, обе переменные s1 и s2 ссылаются на один и тот же объект в пуле строк, а значит их сравнение через == вернёт true.

Вопрос 3

Что будет выведено на консоль в результате работы следующей программы?

String str = "Ja" + "va";StringBuilder sb = new StringBuilder();sb.append("Ja").append("va");
System.out.print(sb.toString() == str);

а. true
б. false

б. false

Метод toString() класса StringBuilder всегда возвращает новый объект типа String. Он никогда не обращается к пулу строк, поэтому хотя в пуле есть строка "Java", благодаря инструкции

String str = "Ja" + "va";

тем не менее StringBuilder об этом никогда не узнает, создаст новый объект. И операция ==, применённая к двум разным объектам, ожидаемо вернёт false.

Вопрос 4

Что будет выведено на консоль в результате работы следующей строки?

System.out.print(""+null);

а. null
б.
Строка выбросит NullPointerException

а. null

Значение null безопасно "складывается" со строками и всегда превращается в строку "null".