Должен ли я устанавливать начальные значения строки java от нуля до ""?
Часто у меня есть класс как таковой:
public class Foo
{
private String field1;
private String field2;
// etc etc etc
}
Это приводит к тому, что начальные значения поля1 и поля2 равны нулю. Было бы лучше иметь все поля класса String следующим образом:
public class Foo
{
private String field1 = "";
private String field2 = "";
// etc etc etc
}
Затем, если я согласен с определением класса, я бы избегал много проблем с нулевым указателем. Каковы проблемы с этим подходом?
Ответы
Ответ 1
Я не согласен с другими плакатами. Использование пустой строки допустимо. Я предпочитаю использовать его, когда это возможно.
В подавляющем большинстве случаев пустая строка и пустая строка представляют собой то же самое - неизвестные данные. Представляете ли вы, что с нулевой или пустой строкой является вопросом выбора.
Ответ 2
Таким образом, это безумие (обычно). Если вы столкнулись с множеством проблем с нулевым указателем, это потому, что вы пытаетесь использовать их до их фактического заполнения. Эти проблемы с нулевым указателем представляют собой громкие неприятные предупреждающие сирены, сообщающие вам, где это используется, позволяя вам затем войти и исправить проблему. Если вы только изначально установили их в пустые, тогда вы рискуете использовать их вместо того, что вы на самом деле ожидали там.
Ответ 3
Абсолютно нет. Пустая строка и пустая строка - совершенно разные вещи, и их не следует путать.
Далее пояснить:
- "null" означает "Я не инициализировал
эта переменная, или она не имеет значения "
- "пустая строка" означает "Я знаю, что это за значение, оно пусто".
Как уже упоминал Юлий, если вы видите много исключений с нулевым указателем, это потому, что вы ожидаете, что вещи будут иметь значения, когда они этого не сделают, или вы небрежны в инициализации вещей перед их использованием. В любом случае вы должны потратить время на правильное программирование - убедитесь, что вещи, которые должны иметь значения, имеют эти значения и убедитесь, что если вы обращаетесь к значениям вещей, которые могут не иметь ценности, вы учитываете это.
Ответ 4
Действительно ли имеет смысл в конкретном случае для значения, которое будет использоваться до того, как оно будет установлено где-то еще, и вести себя как пустая строка в этом случае? т.е. является пустой строкой, фактически правильным значением по умолчанию, и имеет ли смысл иметь значение по умолчанию вообще?
Если да, то в объявлении правильное значение - "". Если нет, это рецепт для сложного поиска ошибок и диагностики.
Ответ 5
Как правило, лучше избегать этого. Несколько причин:
-
Получение исключения NullPointerException обычно является хорошим предупреждением о том, что вы используете переменную до того, как вы ее захотите, или что вы забыли ее установить. Установка его в пустую строку избавит вас от исключения NullPointerException, но, скорее всего, приведет к другой (и более сложной для отслеживания) ошибке дальше по строке в вашей программе.
-
Существует допустимая разница между нулем и "". Значение null обычно указывает, что значение не было установлено или значение неизвестно. Пустая строка указывает, что она была намеренно установлена как пустая. В зависимости от вашей программы эта тонкая разница может быть важна.
Ответ 6
Я бы не предложил.
Вместо этого вы должны дать свои поля разумным значениям. Если они не будут меняться, я бы сделал их окончательными.
public class Foo {
private final String field1;
private final String field2;
public Foo(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
// etc.
}
Не нужно назначать значения i'm-not-initialised-yet. Просто дайте ему начальные значения.
Ответ 7
Я знаю, что это старый вопрос, но я хотел бы указать на следующее:
String s = null;
s += "hello";
System.out.println(s);// this will return nullhello
тогда
String s = "";
s += "hello";
System.out.println(s); // this will return hello
очевидно, что на самом деле ответ на этот вопрос заключается в том, что следует использовать StringBuffer, а не просто конкатенировать строки, но, как мы все знаем, что для некоторого кода его проще конкатенировать.
Ответ 8
Я бы не стал этого делать, вам нужно знать, правильно ли заполнены ваши экземпляры данными.
Ответ 9
Я думаю, что когда вы используете String s = null, он будет создавать переменную "s" только в стеке, и никакой объект не будет существовать в куче, но как только вы объявите вещи как String s = "; что он будет делать, так как он будет создавать объект" на куче ". Поскольку мы знаем, что строки являются неизменными, поэтому всякий раз, когда u wil присваивает новое значение переменной строки каждый раз, когда он создает новый объект в куче... Поэтому я думаю, что String s = null эффективен, чем String s =" ";
Предложения приветствуются!!!!!
Ответ 10
Ни в коем случае. Почему вы хотите это сделать? Это даст неверные результаты. nulls и "" не совпадают.
Ответ 11
Нуль лучше, поэтому они называются непроверенными исключениями (исключение Null pointer}. Когда вызывается исключение, оно сообщает вам, что вы должны инициализировать его до некоторого значения, отличного от нуля, перед вызовом каких-либо методов на нем.
Если вы делаете
private Строковое поле1 = "";
Вы пытаетесь подавить ошибку. Трудно найти ошибку позже.