Поиск по сайту:

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


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

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

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

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

Давайте начнем String Quiz и желаем удачи.

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

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

А. Преобразуйте \Z в целое число 90 и напечатайте \90

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

2. Что выведет приведенная ниже инструкция?

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

А. Выводит \Str

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

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

А. обрезка()

Правильный ответ: А, Б

Допустимые методы класса 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);

А. верноневерно

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

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

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

A. Строка разрешена в случае переключения для Java 1.5 или более поздних версий.

Правильный ответ: Б, С

Подробнее читайте в строке регистра java switch

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

О. StringBuilder не является потокобезопасным.

Правильный ответ: А, Б

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

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

A. Шаблон проектирования легковеса

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

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

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

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

А. 0

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

МетодcompareTo сравнивает две строки лексикографически. Сравнение основано на значении Unicode каждого символа в строках. Последовательность символов, представленная этим объектом 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);
	}
}

А. азбука

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

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);
	}
}

А. ложь

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

Вывод данных операторов будет «ложным», потому что в java + приоритет оператора больше, чем оператор ==. Таким образом, данное выражение будет оценено как «s1 == s2 is:abc» == \»abc», т.е. false.

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

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

А. Java3Quiz7

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

В первую очередь выполняется выражение в скобках. Тогда это все операторы +, поэтому они выполняются слева направо.

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

\Java+1+2+\Викторина+\+(3+4)

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

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

А. 1

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

В операторе 1 \abc создается в пуле строк.

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

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

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

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

А. ложно

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

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

Следовательно, s1==s2 вернет false.

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

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

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

А. Сериализуемый

Правильный ответ: А, В, С

Строка сериализуема и сопоставима. Констебль — это новый интерфейс из версии Java 12.

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

A. Строка неизменна

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

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

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

А. ЯВА

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

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

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

А. ложь

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

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

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

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

А. ложь

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

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

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

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

А. Строковый буфер

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

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

О. Мы можем расширить класс String, как это делает StringBuffer.

Правильный ответ: С, Д, Е

Мы не можем расширить класс 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

А. nullnull

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

Строка 2 напечатает null, потому что print метод имеет проверку на null следующим образом:

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

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

Заключение

В этой викторине я попытался охватить большинство важных моментов, касающихся String. Если вы считаете, что какая-то интересная концепция была упущена, сообщите мне об этом в комментариях. Если вам понравилась викторина, поделитесь ею и с другими.