Разница между пустой и пустой строкой
В чем разница между пустой строкой (String s = null
) и пустой строкой (String s = ""
)?
Это то, что у меня есть:
String s1 = ""; //print statement does not print any thing for s1 but s1.length()=0
String s2 = null;//print statement prints "null" for s2 but s2.length() gives exception
Что это значит?
Ответы
Ответ 1
String s1 = "";
означает, что пустой String
присваивается s1
.
В этом случае s1.length()
совпадает с "".length()
, что даст 0
, как ожидалось.
String s2 = null;
означает, что (null
) или "no value at all" присваивается s2
. Итак, этот, s2.length()
совпадает с null.length()
, который даст NullPointerException
, поскольку вы не можете вызывать методы в переменных null
(указатели, типы) в Java.
Кроме того, точка, утверждение
String s1;
Фактически имеет тот же эффект, что и:
String s1 = null;
В то время как
String s1 = "";
Есть, как сказано, другое дело.
Ответ 2
Null
ничего не значит. Это буквально. Null
- значение ссылочной переменной. Но пустая строка пуста. Она дает length=0
. Пустая строка - это пустое значение, означает, что в строке ничего нет.
Ответ 3
Ни один метод не может быть вызван для объекта, которому назначено значение NULL
. Это даст nullPointerException
. Следовательно, s2.length()
дает исключение.
Ответ 4
Когда переменные объекта изначально используются на языке Java, они абсолютно не имеют значения - не ноль, а буквально нет значения - это null
Например: String s;
Если бы вы использовали s
, у него действительно было бы значение null
, потому что оно не содержит абсолютного ничего.
Пустая строка, однако, является значением - это строка без символов.
String s; //Inits to null
String a =""; //A blank string
null
по существу "ничего" - это значение по умолчанию (использовать термин "свободно" ), которое Java присваивает любой переменной Object, которая не была инициализирована.
null
не является действительно значением - и, как таковой, не имеет свойств. Таким образом, вызов чего-либо, предназначенного для возврата значения - например, .length()
, всегда будет возвращать ошибку, потому что "ничего" не может иметь свойств.
Чтобы углубиться, создав s1 = "";
, вы инициализируете объект, который может иметь свойства, и занимает соответствующее пространство в памяти. Используя s2;
, вы указываете, что имя переменной является строкой, но на самом деле не назначаете никакого значения в этой точке.