Должны ли инициализироваться переменные типа Java String (local) равными null или ""?

Какова наилучшая практика для инициализации переменной String (локальной), чтобы избежать ошибки инициализации "Variable, возможно, не была" в Java?

String s = null; или Строка s = "";

Разве это имеет значение? Если да, то какой из них лучше и почему?

Я читал противоречивые ответы в Интернете.

Спасибо!

Ответ 1

Да, это имеет значение. Один из них - ссылка на пустую строку, одна - на нулевую ссылку. Они не то же самое.

Что лучше? Это зависит от того, хотите ли вы получить нулевое значение или ссылку на пустую строку... они ведут себя по-другому, поэтому выберите тот, который ведет себя так, как вы хотите.

Мне редко приходится присваивать значение "dummy" переменной, хотя, как правило, просто инициализация переменной в точке объявления с реальным значением, которое я хочу, это нормально. Если вы можете дать нам больше контекста, мы сможем помочь вам структурировать ваш код лучше, так что это не проблема для вас.

Ответ 2

Лучшей практикой является создание максимально возможного количества полей или использование значений по умолчанию, чтобы избежать создания экземпляров с ошибками или неполных объектов. Если для поля имеет значение пустое значение по умолчанию (т.е. Оно не будет рисковать логическими ошибками), то во что бы то ни стало это делается. В противном случае, по крайней мере, null выдает исключение, когда клиент вызывает метод для объекта, который не был правильно создан.

В общем, попробуйте заставить клиентский код создавать полные объекты во время построения. Если вы не знаете, что строка должна быть во время построения, попросите их передать ее в качестве параметра. Если строка используется только для внутренней логики, она может быть лучше как локальная переменная или параметр - и в этом случае я обычно предпочитаю null для "", потому что == null более явный, чем isEmpty().

Ответ 3

Все зависит от того, что вы хотите от своей программы. Иногда бывает полезно узнать, была ли уже установлена ​​строка или нет, при которой null было бы лучше. В других случаях вы хотите предотвратить NullPointers, который делает "" лучше.

Ответ 4

Это действительно зависит от того, что вы делаете в своей программе.

"" (пустая строка) подключается только к String и более безопасна, чем null. Когда вы вызываете методы из класса String, например: replaceAll(), indexOf(), программа будет работать правильно , но, когда у вас есть значение null, у вас есть NullPointerException все время, когда вы вызываете метод на нем.

Считайте, что если пустое значение строки в вашем приложении вам не плохо, выберите str = "".

Заметьте, что очень часто лучше, когда NullPointerException выбрасывается из-за того, что мы знаем о некорректном состоянии в нашем приложении, поэтому, когда вам нужно знать об этом, установите String равным null по умолчанию.

Ответ 5

Я предпочитаю инициализировать String в Java как ", потому что я стараюсь избегать нулевых указателей. Нулевые указатели добавляют много накладных расходов, которые могут быть удалены путем назначения" " вместо null.

Ответ 6

Чаще всего я бы сказал: не инициализируйте свою локальную переменную вообще при ее объявлении, если это будет фиктивное значение, например "" или null. Вставьте реальное значение или подождите, пока вы его не поместите.

Затем компилятор будет удостовериться, что есть хотя бы одно назначение перед любым возможным использованием переменной. Только для редких случаев, когда компилятор недостаточно умен, чтобы понять это (поскольку ему нужна информация, недоступная для него локально), я бы использовал некоторую инициализацию, а затем обычно null лучше, так как он показывает с помощью исключения NullPointerException, когда я был неправ. (Я мог бы добавить assert s != null после того момента, когда я думаю, что Инициализация должна быть выполнена для обеспечения этого.)