Ответьте на вопросы нашей викторины, чтобы проверить свои знания по строкам на языке программирования 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».