Ответьте на вопросы нашей викторины, чтобы проверить свои знания по строкам на языке программирования Java.
1. Какое из следующих утверждений правильно описывает поведение этой программы?
public class Test { public static void main(String[] args) { String str = null; System.out.println(str.valueOf(10)); } }
a) Эта программа приведет к ошибке компиляции.
b) Эта программа выбросит NullPointerException.
c) Эта программа выведет 10 в консоли.
d) Эта программа выведет null в консоли.
Ответ:
c) Эта программа выведет 10 в консоли
Объяснение:
Метод valueOf(int)
– это статический метод класса String, который возвращает строковое представление целочисленного значения, переданного в качестве аргумента. Поскольку вызов статического метода не требует разыменования ссылочной переменной, на которую он вызывается, эта программа не вызывает NullPointerException
.
2. Что выведет программа?
public class Test { public static void main(String[] args) { String s = new String("5"); System.out.println(1 + 10 + s + 1 + 10); } }
a) 11511
b) 1105110
c) 115110
d) 27
Ответ:
c) 115110
Объяснение:
Оператор конкатенации строк работает следующим образом: если оба операнда – числа, он выполняет сложение; в противном случае он конкатенирует аргументы, вызывая метод toString()
при необходимости. Следовательно, программа создает строку “115110”.
3. Что выведет программа ниже?
public class Test { public static void main(String[] args) { String str = null; switch (str) { // #1 case "null": System.out.println("null string"); // #2 break; } } }
а) Эта программа приводит к ошибке компилятора в утверждении #1.
b) Эта программа приводит к ошибке компилятора в утверждении #2.
c) Эта программа приводит к NullPointerException.
d) Эта программа выводит “null string”.
Ответ:
c) Эта программа приводит к NullPointerException.
Объяснение:
Если в оператор switch передается null
, это приводит к NullPointerException.
4. Каким будет результат следующей программы?
public class Test { public static void main(String[] args) { String s1 = null; System.out.println(s1); //line 2 System.out.println(s1.toString()); //line 3 } }
a) null null
b) null NullPointerException
c) NullPointerException NullPointerException
d) None
Ответ:
b) null NullPointerException
Объяснение:
Строка 2 выведет null, потому что метод println()
имеет проверку на null, как показано ниже.
if (s == null) { s = "null"; }
5. Выберите все классы, которые наследуются от класса String
a) StringBuffer
b) StringBuilder
c) StringWriter
d) None
Ответ:
d) None
Объяснение:
String – это final класс, поэтому от него нельзя наследоваться.
6. Что выведет программа ниже?
public class Test { public static void main(String[] args) { String s1 = "hello"; String s2 = new String("hello"); s2 = s2.intern(); System.out.println(s1 == s2); } }
a) false
b) true
c) none
Ответ:
b) true
Объяснение:
В Java метод intern()
вернет ссылку на объект String из пула строк. Если мы присваиваем результат метода intern()
переменной s2
, то это приводит к тому, что s1
и s2
теперь указывают на один и тот же объект.
7. Что выведет программа?
public class Test { public static void main(String[] args) { String s1 = "abc"; StringBuffer s2 = new StringBuffer(s1); System.out.println(s1.equals(s2)); } }
а) false
b) true
c) ClassCastException во время выполнения
d) Compile-time error
Ответ:
a) false
Объяснение:
В результате будет выведено false, потому что s2
не является типом данных String. Если вы посмотрите на реализацию метода equals в классе String, то найдете проверку с помощью instanceof
, который проверяет, является ли тип передаваемого объекта типом данных String. Если нет, то возвращается false
.
8. Каков результат выполнения следующего кода?
String s1 = "Java"; String s2 = "Java"; StringBuilder sb1 = new StringBuilder(); sb1.append("Ja").append("va"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(sb1.toString() == s1); System.out.println(sb1.toString().equals(s1));
A. true выводится ровно один раз.
B. true выводится ровно два раза.
C. true выводится ровно три раза.
D. true выводится ровно четыре раза.
E. Код не компилируется.
Ответ:
C. true выводится ровно три раза.
Объяснение:
Строковые литералы извлекаются из пула строк. Это означает, что s1
и s2
ссылаются на один и тот же объект и равны между собой. Поэтому первые два вывода дают true
. Третий вывод дает false, потому что метод toString()
создает новую строку, а не берет ее из пула строк. Последний оператор печати снова выводит true, потому что equals()
сравнивает содержимое объектов String.
9. В чем разница между StringBuilder и StringBuffer в Java?
а) StringBuilder является mutable, а StringBuffer – immutable.
b) StringBuilder не является потокобезопасным, а StringBuffer является.
c) StringBuilder синхронизирован, а StringBuffer не синхронизирован.
d) Нет разницы; их можно использовать взаимозаменяемо.
Ответ:
b) StringBuilder
не является потокобезопасным, а StringBuffer
является.
10. Что происходит при объединении двух объектов типа данных String с помощью оператора + в Java?
a) Создается новый объект типа данных String.
b) Первый объект изменяется.
c) Изменяется второй объект.
d) Исходные объекты остаются неизменными.
Ответ:
a) Создается новый объект типа данных String.
Объяснение:
В Java строки являются неизменяемыми объектами. Это означает, что их значения не могут быть изменены после создания. Когда мы используем оператор + для объединения строк, Java создает новый объект String для хранения результата конкатенации. В этом новом объекте содержится комбинация символов из первой и второй строки.
11. Что выдает следующий фрагмент кода?
String str = "Hello"; str += " World!"; System.out.println(str.length());
a) 5
b) 11
c) 12
d) Compile-time error
Ответ:
c) 12
Объяснение:
Когда “Hello” конкатенируется с ” World!”, образуется новая строка “Hello World!”. Длина этой строки равна 12 символам, поэтому выведется значение 12.
12. Что выдает следующий фрагмент кода?
public class Main { public static void main(String[] args) { String str = "Java"; str.concat(" Programming"); System.out.println(str); } }
a) Java
b) Java Programming
c) Programming
d) Compile-time-error
Ответ:
a) Java
Объяснение:
Метод concat()
возвращает новую строку, полученную в результате конкатенации указанной строки с исходной строкой. Однако в этом коде результат concat()
не присваивается обратно переменной str
. Поэтому исходная строка “Java” остается неизменной, и на выходе получается “Java”.
13. Какой из следующих методов используется для сравнения двух строк на равенство в Java?
a) equals()
b) compareTo()
c) contains()
d) concat()
Ответ:
a) equals()
Объяснение:
Метод equals()
используется для сравнения двух строк на равенство в Java. Он возвращает true, если две строки содержат одинаковую последовательность символов, и false в противном случае.
14. Какой метод используется для преобразования строки в верхний регистр в Java?
a) toLowerCase()
b) toUpperCase()
c) trim()
d) replace()
Ответ:
b) toUpperCase()
Объяснение:
Метод toUpperCase()
используется для преобразования строки в верхний регистр в Java. Он возвращает новую строку со всеми символами, преобразованными в заглавные буквы.
15. Каким будет вывод следующего кода?
public class Main{ public static void main(String []args){ String str1 = "Java"; String str2 = "Java"; String str3 = new String("Java"); System.out.println(str1.equals(str2) && str1.equals(str3)); } }
A) true
B) false
C) Compile error
D) Runtime error
Ответ:
A) true
Объяснение:
В этом коде str1
и str2
ссылаются на один и тот же строковый литерал “Java”. Поэтому str1.equals(str2)
возвращает true. Метод equals()
сравнивает фактическое содержимое строк.
Перевод статьи «Java String Quiz – Multiple Choice Questions».