Викторина по Java String

Добро пожаловать на викторину по строкам Java. Строка – один из самых важных классов в Java. Если вы занимались программированием на Java, то наверняка использовали ее.

Строка очень популярна, когда речь идет о вопросах на собеседованиях по Java или в викторинах. Поэтому я подготовил несколько отличных и хитрых вопросов для викторины по строкам в Java, которые вы можете попробовать.

Викторина по строкам Java

В этой викторине 21 вопрос. Если вы сможете правильно ответить на 15 или более, то считайте себя настоящим знатоком концепций строк. Вы можете проверить ответ и подробное объяснение, нажав на кнопку “Показать ответ” после каждого вопроса.

Давайте начнем викторину по строкам, и удачи вам.

1. Что будет выведено на экран при выполнении следующих операторов?

String s = "Java String Quiz";
System.out.println(s.charAt(s.toUpperCase().length()));

A. Convert “Z” to int 90 and prints “90”
B. Runtime Exception
C. Prints “z”
D. Prints “Z”

Click to Reveal Answer

** Правильный ответ: B
**
Будет сгенерировано исключение времени выполнения. Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16 Потому что индексация начинается с 0.

2. Что будет выведено на экран при выполнении следующих операторов?

String s = "Java String Quiz";
System.out.println(s.substring(5,3));

A. Prints “Str”
B. Runtime Exception
C. IndexOutOfBoundsException Runtime Exception
D. StringIndexOutOfBoundsException Compile-time error

Click to Reveal Answer

** Правильный ответ: B
**
Будет сгенерировано исключение времени выполнения с сообщением об ошибке: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16. Это происходит потому, что конечный индекс меньше начального индекса.

3. Выберите все верные методы класса String.

A. trim()
B. intern()
C. toLower()
D. split()

Click to Reveal Answer

Правильный ответ: A, B

Действительные методы класса String – trim(), intern(), toLowerCase(), и split(String regex).

4. Какой будет вывод следующих утверждений?

String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.print(s1 == s2);
System.out.print(s1 == s3);

A. truefalse
B. truetrue
C. falsefalse
D. falsetrue

Click to Reveal Answer

**Правильный ответ: A
**
Когда мы используем двойные кавычки для создания строки, она сначала ищет строку с таким же значением в пуле строк. Если находит, то возвращает ссылку, иначе создает новую строку в пуле и затем возвращает ссылку.

Однако, используя оператор new, мы заставляем класс String создать новый объект String в куче. Поэтому s1 и s2 будут ссылаться на одну и ту же строку в пуле, в то время как s3 будет отдельным объектом вне пула, как видно из вывода.

5. Какие из следующих утверждений верны для строки в операторе switch case?

A. String is allowed in switch case for Java 1.5 or higher versions.
B. String is allowed in switch case for Java 1.7 or higher versions.
C. The equals() method is used by switch-case implementation, so add null check to avoid NullPointerException.

Click to Reveal Answer

Правильный ответ: B, C

Подробнее читайте на java switch case string

6. Какие из следующих утверждений верны для StringBuffer и StringBuilder?

A. StringBuilder is not thread-safe.
B. StringBuffer is thread safe because its methods are synchronized.
C. StringBuilder was introduced in Java 1.4
D. StringBuffer and StringBuilder are immutable.

Click to Reveal Answer

Правильный ответ: A, B

Объект StringBuffer является потокобезопасным, так как его методы синхронизированы. Но это накладывает дополнительные накладные расходы в большинстве случаев, поэтому в Java 1.5 был введен StringBuilder. StringBuilder не является потокобезопасным. StringBuffer и StringBuilder являются изменяемыми классами. Подробнее читайте на String vs StringBuffer vs StringBuilder.

7. Реализация класса String соответствует какому из нижеперечисленных шаблонов проектирования?

A. Flyweight Design Pattern
B. Factory Pattern
C. Singleton Pattern
D. None of the above

Click to Reveal Answer

Правильный ответ: A

Реализация пула строк следует шаблону проектирования легковес.

8. Каков будет результат выполнения нижеприведенных операторов?

String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));

A. 0
B. true
C. -3
D. false

Click to Reveal Answer

**Правильный ответ: C
**
Из документации метода compareTo() класса String:

Метод compareTo сравнивает две строки лексикографически. Сравнение основано на значении Юникода каждого символа в строках. Последовательность символов, представленная этим объектом String, сравнивается лексикографически с последовательностью символов, представленной аргументом строки. Результатом является отрицательное целое число, если этот объект String лексикографически предшествует аргументу строки. Результатом является положительное целое число, если этот объект String лексикографически следует за аргументом строки. Результат равен нулю, если строки равны; метод compareTo возвращает 0 только тогда, когда метод equals(Object) вернул бы true.

Это определение лексикографического порядка. Если две строки отличаются, то либо у них есть разные символы на некотором индексе, который является допустимым индексом для обеих строк, либо их длины разные или и то, и другое. Если у них есть разные символы в одной или нескольких позициях индекса, пусть k будет наименьшим таким индексом; тогда строка, символ в позиции k которой имеет меньшее значение, определяется использованием оператора < лексикографически предшествует другой строке. В этом случае метод compareTo возвращает разницу двух значений символов в позиции k в двух строках – то есть значение:

this.charAt(k)-anotherString.charAt(k)

В нашем примере “abc” предшествует “def”, поэтому возвращается отрицательное целое число. Затем наименьший индекс с отличающимся символом равен 0, и a-d равняется -3.

9. Какой будет вывод программы ниже?

public class Test {
	public static void main(String[] args) {
		String x = "abc";
		String y = "abc";
		x.concat(y);
		System.out.print(x);
	}
}

A. abc
B. abcabc
C. null

Click to Reveal Answer

Правильный ответ: A

Операция x.concat(y) создаст новую строку, но она не присваивается переменной x, поэтому значение x не изменяется.

10. Какой будет вывод программы ниже?

public class Test {
	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "abc";
		System.out.println("s1 == s2 is:" + s1 == s2);
	}
}

A. false
B. s1 == s2 is:true
C. s1 == s2 is:false
D. true

Click to Reveal Answer

Правильный ответ: A

Вывод заданного выражения будет “false”, потому что в Java приоритет оператора + выше, чем у оператора ==. Таким образом, данное выражение будет оценено как “s1 == s2 is:abc” == “abc”, что равно false.

11. Какой будет вывод следующих выражений?

String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);

A. Java3Quiz7
B. Java12Quiz7
C. Java12Quiz34
D. Java3Quiz34

Click to Reveal Answer

Правильный ответ: B

Сначала выполняется выражение в скобках. Затем выполняются все операторы +, поэтому они выполняются слева направо.

Мы получаем строку с каждой конкатенацией, поэтому вывод производится следующим образом.

“Java”+1+2+”Quiz”+””+(3+4)
= “Java”+1+2+”Quiz”+””+7
= “Java1″+2+”Quiz”+””+7
= “Java12″+”Quiz”+””+7
= “Java12Quiz”+””+7
= “Java12Quiz”+7
= “Java12Quiz7”

12. Сколько объектов String создается в следующих выражениях?

String s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2

A. 1
B. 2
C. 3
D. 4

Click to Reveal Answer

Правильный ответ: C

В выражении 1 создается строка “abc” в пуле строк.

В утверждении 2, сначала создается строка “abcd” в пуле строк. Затем она передается в качестве аргумента оператору new String, и еще одна строка создается в куче памяти.

Таким образом, всего создается 3 объекта строки.

13. Какой будет результат выполнения следующих операторов?

String s1 = "abc";
String s2 = new String("abc");
System.out.print(s1==s2);
System.out.println(s1==s2.intern());

A. falsetrue
B. falsefalse
C. truetrue
D. truefalse

Click to Reveal Answer

Правильный ответ: A

s1 находится в пуле строк, в то время как s2 создается в куче памяти.

Таким образом, s1 == s2 вернет false.

Когда вызывается метод s2.intern(), он проверяет, есть ли в пуле строк строка со значением “abc”. Таким образом, он возвращает ссылку на s1. Теперь s1 и s2 указывают на один и тот же экземпляр строки.

Следовательно, s1 == s2.intern() вернет true.

14. Выберите все интерфейсы, реализованные классом String.

A. Serializable
B. Comparable
C. Constable
D. Cloneable

Click to Reveal Answer

Правильный ответ: A, B, C

String реализует интерфейсы Serializable и Comparable. Constable – новый интерфейс, появившийся в Java 12.

15. Выберите все причины, которые делают строку идеальным кандидатом для ключа Map?

A. String is immutable
B. String is final
C. String properly implements hashCode() and equals() method
C. String hashcode is cached

Click to Reveal Answer

**Правильный ответ: A, B, C
**
Правильная реализация методов hashCode() и equals() является необходимым условием для ключа Map. Поскольку строка является финальной и неизменяемой, нет шансов на испорченные данные ключа.

16. Какой будет результат выполнения следующего фрагмента кода?

String s1 = new String("java");
String s2 = new String("JAVA");
System.out.println(s1 = s2);

A. JAVA
B.java
C. true
D. false

Click to Reveal Answer

**Правильный ответ: A
**
Будет выведено “JAVA”, потому что аргумент внутри метода println() является присваиванием. Таким образом, он будет рассматриваться как System.out.println("JAVA").

17. Какой будет результат выполнения следующих операторов?

String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));

A. false
B. true
C. ClassCastException at runtime
D. Compile-time error

Click to Reveal Answer

Правильный ответ: A

Он напечатает false, потому что s2 не является типом String. Если вы посмотрите на реализацию метода equals() в классе String, то увидите проверку с использованием оператора instanceof, чтобы проверить, является ли тип переданного объекта String? Если нет, то возвращается false.

18. Каким будет вывод нижеприведенного фрагмента кода?

String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);

A. false
B. true
C. null

Click to Reveal Answer

Правильный ответ: A

Это ловкий вопрос, и вывод будет false. Мы знаем, что метод intern() вернет ссылку на объект String из пула строк, но так как мы не присвоили его обратно s2, то изменений в s2 не произошло. Следовательно, s1 и s2 имеют разные ссылки.

Если мы изменяем код на строке 3 на s2 = s2.intern();, то вывод будет true.

19. Выберите все классы, которые расширяют класс String.

A. StringBuffer
B. StringBuilder
C. StringWriter
D. None

Click to Reveal Answer

**Правильный ответ: D
**
Это ловкий вопрос. String – это финальный класс, поэтому вы не можете его расширить.

20. Какие из следующих утверждений верны относительно класса String в Java?

A. We can extend String class like StringBuffer does it.
B. String class is defined in java.util package.
C. String is immutable in Java.
D. String is thread-safe in Java.
E. String is case sensitive in Java.

Click to Reveal Answer

Правильный ответ: C, D, E

Мы не можем расширить класс String, потому что он финальный. StringBuffer не расширяет его. Класс String определен в пакете java.lang. Строка неизменяема и поэтому потокобезопасна в Java. Строка чувствительна к регистру, поэтому “abc” не равно “ABC”.

21. Каким будет вывод следующих операторов?

String s1 = null;
System.out.print(s1); // line 2
System.out.print(s1.toString()); // line 3

A. nullnull
B. null followed by NullPointerException
C. NullPointerException

Click to Reveal Answer

Правильный ответ: B

На строке 2 будет напечатано null, потому что метод print содержит проверку на null, подобную этой:

if (s == null) { s = "null";}

Строка 3 вызовет NullPointerException, потому что мы пытаемся вызвать функцию toString() для null.

Вывод

I have tried to cover most of the important points about String in this Quiz. If you think some interesting concept has been missed, please let me know through comments. If you liked the Quiz, share it with others too.

Source:
https://www.digitalocean.com/community/tutorials/java-string-quiz