null = "" для строки - PullRequest
       3

null = "" для строки

10 голосов
/ 28 июня 2010

В Java эти два утверждения одинаковы?

String a = null;
String b = "";

Это кажется немного глупым вопросом, но в настоящее время у него полный ментальный блок.

Ответы [ 8 ]

29 голосов
/ 28 июня 2010

Пустая строка и null различны. Пустая строка - это строка без символов, null вообще не имеет строки.

Вы можете вызывать методы для пустой строки, но если вы попытаетесь вызвать метод для null, вы получите исключение.

public static void main(String[] args)
{
    String a = null;
    String b = "";
    System.out.println(b.length());
    System.out.println(a.length());
}

Выход:

0
Exception in thread "main" java.lang.NullPointerException
        at Program.main(Program.java:12)
2 голосов
/ 28 июня 2010

Они определенно не одинаковы. Ваша переменная String действует как ссылка на объект в памяти, и если для нее задано значение null, она ни на что не указывает. Если для него задано значение пустой строки, оно указывает на это.

В моем собственном кодировании я обычно устанавливаю String на "" вместо null, если у меня нет особой потребности в null. Есть некоторые библиотеки, такие как Apache Commons, которые включают вспомогательные классы, такие как StringUtils, которые свернут проверку на пустое значение, пустую строку и даже просто пропуски в один вызов: StringUtils.isBlank (), StringUtils.isNotBlank () и т. Д. Очень удобно. Или вы можете написать свои собственные вспомогательные методы, чтобы сделать подобное довольно легко.

Удачи в Java!

2 голосов
/ 28 июня 2010

Нет, пустая строка не равна нулю.

1 голос
/ 28 июня 2010

Третья возможность:

String c;

Все три, конечно, разные.

0 голосов
/ 16 января 2013

Нет, они разные.Если в методе используется пустая строка, исключение возникает, но не возникает в пустой строке!

0 голосов
/ 29 июня 2010

String a = null;
Строка b = "";

Первый оператор в java инициализирует дескриптор переменной. нет памяти для данных, которые будут сохранены.

Второе утверждение показывает два объекта, первый объект - дескриптор (b), а второй объект - "" (если мы игнорируем более высокие концепции объединения строк в java, где string изменчива, а jvm выдает объединенные экземпляры строки)

Таким образом, две строки не совпадают.

0 голосов
/ 28 июня 2010

null означает, что оно ни к чему не относится, а пустая строка - это специальная строка нулевой длины.

0 голосов
/ 28 июня 2010

это не так глупо, как кажется. это беспокоит даже опытных программистов. во многих реальных проектах люди часто пишут что-то вроде if(s==null || s.isEmpty()), то есть люди воспринимают null и "" как семантически эквивалентный .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...