Разница между null и пустой ("") строкой Java
В чем разница между null
и ""
(пустая строка)?
Я написал простой код:
String a = "";
String b = null;
System.out.println(a==b); // false
System.out.println(a.equals(b)); // false
оба заявления возвратить false
. Кажется, я не в состоянии найти то, что является фактической разницей между ними.
13 ответов:
"" - это строка, хотя и пустой.
null, однако, означает, что строковая переменная не указывает ни на что.
a==b
возвращает false, потому что "" и null не занимают одно и то же пространство в памяти-другими словами, их переменные не указывают на одни и те же объекты.
a.equals(b)
возвращает false, потому что "" не равно null, очевидно.разница в том, что, поскольку "" является фактической строкой, вы все равно можете вызвать методы или функции на нем, как
a.length()
a.substring(0, 1)
и так далее.
если строка равна null, например b, Java бросит a
NullPointerException
если вы пытались ссылаться, сказал:
b.length()
если разница вы задаетесь вопросом О = = против равных, это так:
== сравнивает ссылки, как если бы я пошел
String a = new String(""); String b = new String(""); System.out.println(a==b);
что бы вывести false, потому что я выделил два различные объекты, а также A и b указывают на разные объекты.
,a.equals(b)
в этом случае вернет true, потому чтоequals
для строк вернет true если и только если строка аргумента не является нулевой и представляет собой ту же последовательность символов.однако имейте в виду, что Java имеет особый случай для строк.
String a = "abc"; String b = "abc"; System.out.println(a==b);
вы могли бы подумать, что выход будет
false
, так как он должен выделять два разных Веревка. На самом деле, Java будет интерн литеральные строки (те, которые инициализируются как a и b в нашем примере). Так что будьте осторожны, потому что это может дать некоторые ложные срабатывания о том, как == работает.
строка является объектом, и может быть null
null означает, что объект String не был создан
"" является фактическое значение экземпляра объекта String типа "ААА"
вот ссылка, которая может прояснить этот момент http://download.oracle.com/javase/tutorial/java/concepts/object.html
то, что ваши утверждения говорят вам, это просто то, что "" не то же самое, что null - что верно. ""является пустой строкой; null означает, что значение не назначено.
было бы более поучительно попробовать:
System.out.println(a.length()); // 0 System.out.println(b.length()); // error; b is not an object
"" по-прежнему является строкой, то есть вы можете вызывать ее методы и получать значимую информацию. null-это пустая переменная-там буквально ничего нет.
существует довольно значительная разница между ними. Пустая строка
""
это " строка, в которой нет символов."Это реальная строка, которая имеет четко определенную длину. Все стандартные строковые операции четко определены на пустой строке - вы можете преобразовать ее в нижний регистр, посмотреть индекс некоторого символа в ней и т. д. Нулевая строкаnull
это "нет строки вообще.- У него нет длины, потому что это вовсе не струна. Попытка применить любой стандарт строковая операция с нулевой строкой вызоветNullPointerException
во время выполнения.
здесь
a is an Object
ноb(null)
и не объект это нулевая ссылкаSystem.out.println(a instanceof Object); // true System.out.println(b instanceof Object); // false
здесь мой аналогичный ответ
null означает, что имя не ссылается на какой-либо экземпляр объекта. "" означает пустую строку.
здесь a ссылается на какой-то объект, который оказывается пустой строкой. b не ссылается на какой-либо объект, поскольку он равен нулю.
в Java присвоен ссылочный тип
null
и нет значения вообще. Строка назначена""
имеет значение: пустая строка, то есть строка без символов в нем. Когда переменной присваиваетсяnull
Это означает, что нет никакого базового объекта любого рода, строки или иным способом.
"" и null обе разные . первый означает, что в рамках объявления строковой переменной строковая константа была создана в пуле строк, и для нее была назначена некоторая память.
но когда мы объявляем его с null тогда он только что был создан JVM, но для него не было выделено памяти. поэтому, если вы пытаетесь получить доступ к этому объекту, проверяя его с помощью "" - пустой переменной , это не может предотвратить nullpointerexception . Ниже вы найдете один случай.
public class StringCheck { public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "siddhartha"; String s2 = ""; String s3 = null; System.out.println("length s1 ="+s1.length()); System.out.println("length s2 ="+s2.length()); //this piece of code will still throw nullpointerexception . if(s3 != ""){ System.out.println("length s3 ="+s3.length()); } }
}
String s = ""; s.length(); String s = null; s.length();
ссылка на пустую строку
""
указывает на объект в куче - так что вы можете вызывать методы на нем.но ссылка, указывающая на
null
нет объекта в куче и, таким образом, вы получитеNullPointerException
.
пустая строка отличается от нулевая ссылка в том, что в объектно-ориентированный язык программирования нулевая ссылка на строковый тип не указывает на строковый объект и вызовет ошибку, если кто-то попытается выполните любую операцию на нем. Пустота строка, еще строка, на которой могут быть предприняты строковые операции.
из статьи Википедии о пустая строка.
строка может быть пустой или иметь
null
значение. Если строкаnull
, Это не относится ни к чему в памяти. Попробуйs.length()>0
. Это связано с тем, что если строка пуста, она все равно возвращает длину 0. Поэтому, если вы ничего не вводите для того же самого, то он все равно будет продолжать цикл, так как он не регистрирует строку какnull
. Тогда как если вы проверите длину, то он выйдет из своего цикла.
это понятие можно лучше понять из математики. Вы когда-нибудь пробовали разделить число (не ноль) на 0 с помощью калькулятора, например, 7/0? Вы получите результат, который выглядит примерно так:
undefined
,not a number
,null
etc. Это означает, что операция невозможна по некоторым причинам (давайте оставим эти причины для обсуждения в другой день).теперь выполните следующее: 0/7. Вы получите выход, 0. Это означает, что операция возможна и может быть выполнена, но вы ответ просто 0, потому что ничего не осталось после дележа. Существует допустимый выход, и этот выход равен нулю.
в первом примере не только вывод был недействительным, но и операция не была выполнена. Это сродни
null
строка в java. Второй пример-это сродниempty
строку.