new String(«Hello_42») == «Hello_» + 42

Вопросы такого типа, о сравнении строковых и числовых констант, задают для проверки знаний о пуле строк (string pool) или, как его ещё называют пул литералов (literal pool). Он нужен для оптимизации использования компилятора. Если строка встречается несколько раз, то компилятор Java заменяет все упоминания таких строк ссылкой на её экземпляр. Благодаря этому, строка храниться в одном экземпляре, что позволяет уменьшить размер модуля. Это можно осуществить благодаря неизменяемости класса String. Такая оптимизация называется интернирование строк.

Поэтому выражение «Hello» == «Hello» является истинным. Интернирование применяется также и константам. В нашем случае константой является число 42, которое приводится к строке и в результате осуществляется конкатенация констант. Поэтому, выражение «Hello_42» == «Hello_» + 42, также является истинным.

Поэтому, представленное выражение String(«Hello_42») == «Hello_» + 42 ложно.

"Hello" == "Hello"
"Hello" == OtherClass.HELLO
new String("Hello") != "Hello"
"42" != Integer.toString[42)
new String("New string").intern() == "New string"
"Hello " + "world" = "Hello world"
"Hello " + new String("world") != "Hello world"

<Java>#

Поделиться уроком

Ответить

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