🔍 Ответ на задачу про работу String.valueOf() с null! 💡
Вызов String.valueOf((Object) null) в первой строке приводит к тому, что Java воспринимает null как объект, и возвращает строку "null".
Во второй строке, String.valueOf(null) вызывает перегруженный метод, который принимает char[]. Но поскольку передан null, вызов упадет с NPE. 🚀
Выводы: всегда смотрите реализацию метода, который вызывается.
Может быть несколько перегруженных методов, реализация которых очень сильно отличается.
Спасибо, что дочитали до сюда) Не забудьте поставить лайк, оставить комментарий и подписаться! 🙌
#Java #NullPointerException #String #java_interview_tasks
String s1 = String.valueOf((Object) null);
String s2 = String.valueOf(null);
System.out.println(Objects.equals(s1, s2));
Вызов String.valueOf((Object) null) в первой строке приводит к тому, что Java воспринимает null как объект, и возвращает строку "null".
Во второй строке, String.valueOf(null) вызывает перегруженный метод, который принимает char[]. Но поскольку передан null, вызов упадет с NPE. 🚀
Выводы: всегда смотрите реализацию метода, который вызывается.
Может быть несколько перегруженных методов, реализация которых очень сильно отличается.
Спасибо, что дочитали до сюда) Не забудьте поставить лайк, оставить комментарий и подписаться! 🙌
#Java #NullPointerException #String #java_interview_tasks
Telegram
Java Interview Tasks
Что будет в результате исполнения этого кода?
👍32❤6🔥3
🔍 Ответ на задачу про Immutable объекты в Java 🔒
✍️ В Java объект типа String является неизменяемым (immutable). Операция s1.concat(" World") создает новый объект строки и присваивает его s1. Переменная s2 остается ссылаться на старую строку "Hello". Поэтому программа выведет: Hello
Если задача понравилась, ставьте лайк 👍, подписывайтесь на канал и пишите свои ответы и вопросы в комментариях! Обсудим вместе 😊
#java #string #immutable #interview #java_tasks #java_interview_tasks
✍️ В Java объект типа String является неизменяемым (immutable). Операция s1.concat(" World") создает новый объект строки и присваивает его s1. Переменная s2 остается ссылаться на старую строку "Hello". Поэтому программа выведет: Hello
Если задача понравилась, ставьте лайк 👍, подписывайтесь на канал и пишите свои ответы и вопросы в комментариях! Обсудим вместе 😊
#java #string #immutable #interview #java_tasks #java_interview_tasks
Telegram
Java Interview Tasks
Посмотрите на следующий код и выберите, что будет выведено на экран:
public class Main {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = s1;
s1 = s1.concat(" World");
System.out.println(s2);
…
public class Main {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = s1;
s1 = s1.concat(" World");
System.out.println(s2);
…
👍20❤3🔥2😢1
🔍 Ответ на задачу про String Pool: Магия intern() или где живет ваша строка? 🧵
Сравнение строк в Java через
Объяснение:
-
-
- Метод
Вывод:
⚡️ Не перепутайте:
-
-
-
#java #string #stringpool #intern #jvm #interview #java_interview_tasks
Сравнение строк в Java через
== — это классика интервью. Но что произойдет, если мы начнем вручную управлять пулом строк?Объяснение:
-
s1 — это строковый литерал, он сразу попадает в String Pool.-
s2 создается через new String(), поэтому в куче (heap) создается новый объект, отличный от того, что в пуле. Сравнение s1 == s2 дает false.- Метод
intern() ищет строку в пуле. Если она там есть, он возвращает ссылку на объект из пула. Так как "Java" уже там была (от s1), s3 получит ту же самую ссылку.Вывод:
s1 == s3 вернет true, так как обе переменные теперь ссылаются на один и тот же объект в String Pool.⚡️ Не перепутайте:
-
== сравнивает ссылки.-
equals() сравнивает содержимое.-
intern() — полезный инструмент для экономии памяти, если у вас много повторяющихся строк, созданных динамически.#java #string #stringpool #intern #jvm #interview #java_interview_tasks
1👍6
🔍 Ответ на задачу про String: replace vs replaceAll 🧐
-
-
Вывод:
Первая строка выведет
⚡️ Не перепутайте:
Если вам не нужны регулярные выражения, всегда используйте
#java #string #regex #basics #интервью #java_interview_tasks
-
replace(CharSequence target, CharSequence replacement) заменяет литеральные строки. Точка воспринимается просто как символ.-
replaceAll(String regex, String replacement) принимает регулярное выражение. В регулярках точка . означает "любой символ". Поэтому replaceAll заменит абсолютно все символы в строке на слэш.Вывод:
Первая строка выведет
java/is/fun, а вторая — ///////////.⚡️ Не перепутайте:
Если вам не нужны регулярные выражения, всегда используйте
replace(). Он быстрее и безопаснее.#java #string #regex #basics #интервью #java_interview_tasks
👍10🔥6❤1
🔍 Ответ на задачу про String.contains: Ловушка экранирования 🪤
Часто при переходе от регулярных выражений к обычным строковым методам в Java возникает путаница с экранированием.
Многие методы в Java (например,
Однако метод
В данном примере:
-
- Метод
- В строке
Вывод:
Результат будет
⚡️ Не перепутайте:
- Методы
- Методы
#java #string #contains #regex #backslash #интервью #java_interview_tasks
Часто при переходе от регулярных выражений к обычным строковым методам в Java возникает путаница с экранированием.
Многие методы в Java (например,
split, replaceAll) принимают регулярные выражения. В regex символ | (pipe) является специальным (логическое ИЛИ) и требует экранирования — \|.Однако метод
String.contains(CharSequence s) ищет буквальное совпадение подстроки.В данном примере:
-
MULTIPLE_VALUES_SPLITTER инициализируется строкой \| (обратный слеш и вертикальная черта).- Метод
contains честно ищет эти два символа подряд.- В строке
"apple|orange|banana" есть только символ |, но нет символа \.Вывод:
Результат будет
false. Для корректной проверки наличия разделителя в данном случае нужно использовать val.contains("|").⚡️ Не перепутайте:
- Методы
contains, indexOf, replace работают с литералами.- Методы
split, replaceAll, matches работают с регулярными выражениями.#java #string #contains #regex #backslash #интервью #java_interview_tasks
👍8❤1🔥1