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

Разница между пустой и пустой строкой

В чем разница между пустой строкой (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

Что это значит?

4b9b3361

Ответ 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;, вы указываете, что имя переменной является строкой, но на самом деле не назначаете никакого значения в этой точке.