Подтвердить что ты не робот

Должен ли я устанавливать начальные значения строки 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
}

Затем, если я согласен с определением класса, я бы избегал много проблем с нулевым указателем. Каковы проблемы с этим подходом?

4b9b3361

Ответ 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 = "";

Вы пытаетесь подавить ошибку. Трудно найти ошибку позже.