Строки
Вопрос 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".