«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему объединение нулевых строк в Java не вызывает исключение NullPointerException?

Почему объединение нулевых строк в Java не вызывает исключение NullPointerException?

Опубликовано 17 ноября 2024 г.
Просматривать:747

Why Doesn\'t Concatenating Null Strings in Java Throw a NullPointerException?

Объединение пустых строк в 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