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

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

Для начала вам следует попробовать эти фрагменты кода в Eclipse IDE и понять, как работает программа (впрочем, ко всем вопросам даны ответы с пояснениями). Подобные вопросы могут задать на собеседовании, так что готовьтесь.

Для компиляции кода используйте свою IDE или онлайн Java Compiler IDE или любой другой аналог.

Ищете работу Junior QA? Тогда вам в наш телеграм канал QA Вакансии. 
Каждую неделю 7 лучших вакансий с телеграм контактом HR компании. 

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;
        }
    }
}public class Test { public static void main(String[] args) { String str = null; switch (str) { // #1 case "null": System.out.println("null string"); // #2 break; } } }

a) Эта программа приводит к ошибке компилятора в утверждении #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. Что выдаст эта программа?

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

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

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

public class Test {

    public static void main(String[] args) {
        String s1 = "abc";
        StringBuffer s2 = new StringBuffer(s1);
        System.out.println(s1.equals(s2));
    }
}

a) false
b) true
c) ClassCastException во время запуска
d) Ошибка времени компиляции

Ответ: 
a) false

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

7. Каков результат следующего фрагмента кода?

public class Main {
    public static void main(String[] args) {
        String str = "Hello";
        str += " World!";
        System.out.println(str.length());
    }
}

a) 5
b) 11
c) 12
d) Ошибка времени компиляции

Ответ: 
c) 12

Объяснение: 
Когда “Hello” конкатенируется с ” World!”, образуется новая строка “Hello World!”. Длина этой строки равна 12 символам, поэтому на выходе получается 12.

8. Каков результат следующего фрагмента кода?

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) Ошибка времени компиляции

Ответ: 
a) Java

Объяснение: 
Метод concat() возвращает новую строку, полученную в результате конкатенации указанной строки с исходной строкой. Однако в этом коде результат concat() не присваивается обратно переменной str. Поэтому исходная строка “Java” остается неизменной, и на выходе получается “Java”.

9. Что выдает следующий фрагмент кода?

public class Main {
    public static void main(String[] args) {
        String str = "Hello, World!";
        System.out.println(str.indexOf("o"));
    }
}

a) 4
b) 5
c) 7
d) -1

Ответ: 
a) 4

Объяснение: 
Метод indexOf() возвращает индекс первого вхождения указанной подстроки в строку.

Заключение

Поздравляем вас с завершением викторины по типу String в Java! Эти вопросы проверили ваше понимание операций работы со строками, таких как конкатенация, определение длины, поиск символов, сравнение, извлечение подстроки и преобразование регистра. Освоив эти понятия, вы будете лучше подготовлены к эффективной работе со строками в программировании на Java. 

Перевод статьи «Java String Quiz – String Tricky Coding Questions».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *