В чем разница между String.Empty и "" и null?
Возможный дубликат:
В чем разница между String.Empty и ""
Является ли ""
эквивалентным String.Empty
?
Что предпочтительнее для инициализации строковых значений?
Ответы
Ответ 1
public sealed class String {
//...
public static readonly String Empty = "";
//...
}
Используйте null
, если вы хотите представить, что нет значения;
Используйте String.Empty
, когда вы хотите представить, что есть значение, но значение представляет собой пустую строку.
Ответ 2
String.Empty, потому что это статическая переменная, а не "", которая должна создать новую строку, а null означает, что вы должны установить строку равным новому экземпляру строки.
(спасибо за исправление)
Ответ 3
Да. И String.Empty, но, пожалуйста, не беспокойтесь об этом.
Разница между String.Empty и "довольно мала, но есть разница." " фактически создает объект, он, скорее всего, вытащит из внутреннего пула строк, а String.Empty не создаст объект, поэтому, если вы действительно ищете конечный эффективность памяти, я предлагаю String.Empty. Тем не менее, вы должны иметь в виду, что разница настолько велика, что вы будете как никогда не видеть его в вашем коде...
Ответ 4
Используйте то, что вы считаете наиболее читаемым.
Я призываю всех найти реалистичное приложение, где есть значительная разница в производительности... этого просто не произойдет. Однако разные люди находят разные подходы более читабельными.
Лично я человек ""
. Я нахожу его менее загроможденным, и я никогда не сталкивался с проблемой, когда я фактически использовал " "
(или что-то подобное) случайно. (Это одно из возражений часто поднимается.)
Если вы предпочитаете string.Empty
, я, конечно, не буду утверждать, что вы "ошибаетесь". Я бы предположил, однако, что если вы работаете над командой, вы обсуждаете ее, чтобы узнать, что большинство людей считает более читаемым, и придерживайтесь этого. Согласованность, как правило, хорошая вещь.
EDIT: просто чтобы устранить некоторые опасения, которые могут быть вызваны утверждением, что "" создаст новую строку... он может создать новую строку один раз (возможно, за AppDomain
, возможно, за процесс; конечно, и это действительно неважно). Он не будет создавать новую строку каждый раз, когда вы ее используете. Например, рассмотрите этот код:
public void Foo()
{
string x = "";
for (int i=0; i < 10000000; i++)
{
string y = "";
// Do something here
}
string z = "";
}
Вам гарантировано, что x
, y
и z
будут ссылаться на одну и ту же строку. В наибольшей степени вызов Foo
будет означать, что создается одна пустая строка, и только в первый раз, когда вы ее вызываете, и только если вы еще не использовали пустой литерал нигде в программе. В приведенном выше коде не будет создано 10 миллионов новых строк.
Ответ 5
Считается, что лучше использовать string.Empty, однако они эффективно равны. Однако они не совпадают с нулевыми значениями.
Ответ 6
ОТ
http://msdn.microsoft.com/en-us/library/system.string.empty.aspx
Значение этого поля представляет собой строку нулевой длины, "".
В коде приложения это поле чаще всего используется в назначениях для инициализации строковой переменной в пустую строку. Чтобы проверить, является ли значение строки String..::. Пусто, используйте метод IsNullOrEmpty.
Ответ 7
Они равны. Но String.Empty является постоянным.
"" - это способ создания String.
Ответ 8
Ответ, который вы ищете, находится здесь.
В чем разница между String.Empty и "" (пустая строка)?
используйте String.Empty