Объединение пустых строк в Java
В Java объединение пустых строк может показаться нелогичным, что приводит к ожиданию NullPointerException. Однако эта операция выполняется успешно, в результате чего появляется строка, содержащая «ноль», за которой следует объединенная строка.
Почему это работает?
Согласно спецификации языка Java (JLS) 8, § 15.18.1, нулевые ссылки явно преобразуются в строку «null» во время конкатенации строк. Это преобразование происходит перед вызовом любого метода, что гарантирует отсутствие исключений NullPointerException.
Как это работает?
Компилятор Java преобразует выражение конкатенации в эквивалентную последовательность вызовы методов. В случае s = s "hello" компилятор генерирует код, аналогичный:
s = new StringBuilder(String.valueOf(s)).append("hello").toString();
Метод добавления StringBuilder корректно обрабатывает нулевые аргументы. Если первым аргументом является значение null, вызывается метод String.valueOf() для преобразования его в строку.
В качестве альтернативы выражение s = "hello" s может быть преобразовано в:
s = new StringBuilder("hello").append(s).toString();
В этом случае метод добавления принимает значение null в качестве второго аргумента и делегирует его в String.valueOf().
Примечание:
Компиляторы Java могут оптимизировать конкатенацию строк по-разному для повышения производительности, используя такие методы, как объединение строк StringBuilder. Таким образом, точный эквивалентный код может варьироваться в зависимости от используемого компилятора.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3