Разница между нулевым и пустым ("") Java String - PullRequest
131 голосов
/ 26 января 2011

В чем разница между null и "" (пустая строка)?

Я написал несколько простых кодов:

String a = "";
String b = null;

System.out.println(a == b); // false
System.out.println(a.equals(b)); // false

Оба оператора возвращают false.Кажется, я не могу найти, в чем же разница между ними.

Ответы [ 17 ]

1 голос
/ 26 января 2011

Пустая строка отличается от нулевая ссылка на это в объектно-ориентированный язык программирования а пустая ссылка на строковый тип не указывает на строковый объект и приведет к ошибке, если попытаться выполнить любую операцию на нем. Пустой строка по-прежнему является строкой, на которой Строковые операции могут быть предприняты.

Из статьи в Википедии пустая строка .

0 голосов
/ 25 июня 2019

Проще говоря,

  • "" - это пустое String

  • null - это пустое Строковая переменная .

0 голосов
/ 20 апреля 2019

String s=null;

Строка не инициализируется для нуля. если какая-либо строковая операция пробовала, она может выдать исключение нулевого указателя

String t="null";

Это строковый литерал со значением string "null", аналогичным t = "xyz". Это не будет бросать нулевой указатель.

String u="";

Это пустая строка, нулевой указатель не генерируется.

0 голосов
/ 30 января 2019

Когда вы пишете

String a = "";

Это означает, что существует переменная типа 'a' строки, которая указывает на ссылку на объект в пуле строк, которая имеет значение "".Поскольку переменная a содержит действительную ссылку на строковый объект, здесь могут применяться все методы строки.

В то время как при написании

String b = null;

Это означаетчто существует переменная b типа string, которая указывает на неизвестную ссылку .И любая операция с неизвестной ссылкой приведет к NullPointerException.

Теперь давайте оценим следующие выражения.

System.out.println(a == b); // false. because a and b both points to different object reference

System.out.println(a.equals(b)); // false, because the values at object reference pointed by a and b do not match.

System.out.println(b.equals(a)); // NullPointerException, because b is pointing to unknown reference and no operation is allowed
0 голосов
/ 19 января 2019

Я также заметил, что хотя пустая строка является пустой строкой, она все еще содержит действительный адрес памяти.Но указатель NULL будет указывать на ничто.

https://shirleyanengineer.blogspot.com/2019/01/does-empty-string-has-address.html

0 голосов
/ 02 ноября 2017

Эту концепцию можно лучше понять из математики. Вы когда-нибудь пробовали делить число (не ноль) на 0 с помощью калькулятора, например, 7/0? Вы получите результат, который выглядит примерно так: undefined, not a number, null и т. Д. Это означает, что операция невозможна по некоторым причинам (давайте оставим эти причины для обсуждения в другой день).

Теперь выполните это: 0/7. Вы получите вывод 0. Это означает, что операция возможна и может быть выполнена, но вы ответите просто 0, потому что после деления ничего не осталось. Имеется действительный вывод, и этот вывод равен нулю.

В первом примере вывод был не только недействителен, но и операция была невозможна. Это похоже на строку null в Java. Второй пример похож на empty string.

0 голосов
/ 04 декабря 2016

Строка может быть пустой или иметь значение null.Если строка null, она не ссылается на что-либо в памяти.Попробуйте s.length()>0.Это потому, что если строка пуста, она все равно возвращает длину 0. Поэтому, если вы ничего не введете для того же самого, то она все равно продолжит цикл, так как не регистрирует строку как null.Принимая во внимание, что если вы проверите длину, она выйдет из цикла.

...