в чем отличие пустой и null строки
Разница между строкой null и пустой строкой («») Java
В чем разница между null и «» (пустая строка)?
Я написал несколько простых кодов:
1 ответ
Возможные Дубликаты : В C# в чем разница между строкой и строкой Строка против строки в C# Привет, Может ли кто-нибудь сказать мне разницу между двумя строками кода ниже: public const String sample = Sample; public const string sample2 = Sample2; И String, и string имеют System.String. Заранее.
В чем разница между строкой null ( 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 Что это значит?
Вы также можете понять разницу между null и пустой строкой таким образом:
«»это настоящая строка, хотя и пустая.
null, однако, означает, что строковая переменная ни на что не указывает.
a==b возвращает false, потому что «» и null не занимают одно и то же пространство в памяти-другими словами, их переменные не указывают на одни и те же объекты.
a.equals(b) returns false because «» does not equal null, obviously.
The difference is though that since «» is an actual string, you can still invoke methods or functions on it like
Если разница, о которой вы задаетесь вопросом, составляет == по сравнению с равными, то это:
== сравнивает ссылки, например, если бы я пошел
Это приведет к ложному выводу, потому что я выделил два разных объекта, а a и b указывают на разные объекты.
Однако имейте в виду, что Java имеет особый случай для строк.
Строка является объектом и может быть null
null означает, что объект String не был создан
«»является фактическим значением строки экземпляра объекта, например «aaa»
Я только что прочитал раздел справки для абзаца. Он говорит, что абзац начинается после пустой строки. В конце он также упоминает, что то же самое не относится к пустой строке. Я пытаюсь разделить абзацы, вставляя no character lines везде, где я хочу разбить текст на абзацы. Когда я использовал.
Возможно, было бы более поучительно попробовать:
вот мой аналогичный ответ
null означает, что имя не ссылается на какой-либо экземпляр объекта. «» означает пустую строку.
Здесь a ссылается на какой-то объект, который оказывается пустой строкой. b не ссылается ни на какой объект, поскольку это null.
Ссылка на пустую строку «» указывает на объект в куче, поэтому вы можете вызывать методы для него.
Пустая строка отличается от null ссылка на то, что в объектно-ориентированном языке программирования a null ссылка на строковый тип не указывает на строковый объект и вызовет ошибку, если кто-либо попытается выполнить с ним какую-либо операцию. Пустая строка по-прежнему является строкой, с которой могут быть предприняты строковые операции.
Строка не инициализируется для null. если какая-либо строковая операция была предпринята, она может вызвать исключение указателя null
Это строковый литерал со значением string «null», таким же, как t = «xyz». Он не будет бросать указатель null.
Теперь выполните следующее: 0/7. Вы получите результат, 0. Это означает, что операция возможна и может быть выполнена, но вы ответите только 0, потому что после деления ничего не остается. Существует допустимый вывод, и этот вывод равен нулю.
Это означает, что существует переменная ‘a’ типа string, которая указывает на ссылку на объект в пуле строк со значением «». Поскольку переменная a содержит допустимую ссылку на объект string, здесь могут быть применены все методы string.
В то время как когда вы пишете
Теперь давайте оценим приведенные ниже выражения.
«»это пустая строка
Это изображение может помочь вам понять различия.
Изображение было собрано из ProgrammerHumor
Разница между пустой строкой null &. Например: у вас есть переменная с именем x. Если вы пишете в JS,
это означает, что вы присвоили значение, которое является пустой строкой (длина равна 0). На самом деле это похоже на что-то, но это ощущение ничего 🙂 с другой стороны,
это означает, что вы не присвоили значение y, которое ясно сказано, написав null в y во время объявления.
Если вы напишете y.length; он выдаст ошибку, которая указывает на то, что нет значения, присвоенного y, и в результате не может прочитать длину y.
По отношению к реальному миру и то, и другое можно считать одинаковым. Это просто синтаксис языка программирования, который создает разницу между ними, как объясняют здесь другие. Это просто создает накладные расходы, как при проверке / сравнении того, есть ли у строковой переменной что-то, вы должны сначала проверить, нет ли ее null, а затем фактическое сравнение строк, то есть два сравнения. Это пустая трата вычислительной мощности для каждого сравнения строк.
Objects.equals() проверяет наличие null перед вызовом. equals().
Похожие вопросы:
Я немного запутался. В Python в чем разница между двоичной строкой, байтовой строкой, строкой Юникода и простой старой строкой (str)? Я использую Python 2.6.
Возможный Дубликат : В чем разница между строкой и строкой в C# году В C# есть два типа строк. (То же самое для булевых значений, объектов и т. д.). Тот, который начинается с верхнего и нижнего.
Возможные Дубликаты : В C# в чем разница между строкой и строкой Строка против строки в C# Привет, Может ли кто-нибудь сказать мне разницу между двумя строками кода ниже: public const String sample.
В чем разница между строкой null ( String s = null ) и пустой строкой ( String s = )? Вот что у меня есть: String s1 = ; //print statement does not print any thing for s1 but s1.length()=0 String.
Я только что прочитал раздел справки для абзаца. Он говорит, что абзац начинается после пустой строки. В конце он также упоминает, что то же самое не относится к пустой строке. Я пытаюсь разделить.
Мы загружаем данные в CRM через SSIS, и наша база данных содержит нули в строковых столбцах. Нам нужно определить, как с ними обращаться, и если нет никакой разницы между пустой строкой и null в.
Разница между null и пустой («») строкой Java
в чем разница между null и «» (пустая строка)?
Я написал простой код:
13 ответов
«» является фактической строкой, хотя и пустой.
null, однако, означает, что переменная String указывает ни на что.
a==b возвращает false, потому что «» и null не занимают одно и то же пространство в памяти-другими словами, их переменные не указывают на одни и те же объекты.
a.equals(b) возвращает false, потому что «» не равно null, очевидно.
разница в том, что, поскольку «» является фактической строкой, вы все равно можете вызвать методы или функции на нем, как
если строка равна null, например b, Java бросит a NullPointerException если вы пытались ссылаться, сказал:
если разница, которую вы задаетесь вопросом о == по сравнению с равными, это так:
== сравнивает ссылки, как если бы я пошел
это выведет false, потому что я выделил два разные объекты, а a и b указывают на разные объекты.
имейте в виду, что Java имеет особый случай для строк.
вы также можете понять разницу между null и пустой строкой таким образом:
String является объектом и может быть null
null означает, что объект String не был создан
» «является фактическим значением строки экземпляра объекта, например «aaa»
было бы более поучительно попробовать:
«» по-прежнему является строкой, то есть вы можете вызвать ее методы и получить значимую информацию. null-это пустая переменная-там буквально ничего нет.
здесь a is an Object но b(null) и не объект является нулевой ссылкой
здесь мой аналогичный ответ
null означает, что имя не ссылается на какой-либо экземпляр объекта. «» означает пустую строку.
здесь a ссылается на какой-то объект, который является пустой строкой. b не ссылается на какой-либо объект, поскольку он равен null.
в Java назначен ссылочный тип null и нет значения вообще. Строка, назначенная «» имеет значение: пустая строка, то есть строка без символов в нем. Когда переменная назначена null Это означает, что нет никакого базового объекта любого рода, строки или иным способом.
пустая строка отличается от нулевая ссылка в том, что в объектно-ориентированный язык программирования пустая ссылка типа String не указывает на объект String и вызовет ошибку, если кто-то попытается выполните любую операцию на нем. Пустота строка, еще строка, на которой можно попытаться выполнить строковые операции.
из статьи Википедии о пустая строка.
теперь выполните следующее: 0/7. Вы получите выход, 0. Это означает, что операция возможна и может быть выполнена, но вы ответ просто 0, потому что после деления ничего не остается. Существует допустимый выход, и этот выход равен нулю.
в первом примере не только вывод был недопустимым, операция была невозможна для выполнения. Это сродни null строка в java. Второй пример сродни empty строку.
Заметка про NULL
Основные положения
Для удобства сделаем процедуру, печатающую состояние булевого параметра:
и включим опцию печати сообщений на консоль:
Привычные операторы сравнения пасуют перед NULLом:
Сравнение с NULLом
Соответственно, IS NOT NULL действует наоборот: вернёт истину, если значение операнда отлично от NULLа и ложь, если он является NULLом:
DECODE идёт против системы:
Пример с составными индексами находится в параграфе про индексы.
Логические операции и NULL
В большинстве случаев неизвестный результат обрабатывается как ЛОЖЬ :
Отрицание неизвестности даёт неизвестность:
Операторы IN и NOT IN
Для начала сделаем несколько предварительных действий. Для тестов создадим таблицу T с одним числовым столбцом A и четырьмя строками: 1, 2, 3 и NULL
Включим трассировку запроса (для этого надо обладать ролью PLUSTRACE ).
В листингах от трассировки оставлена только часть filter, чтобы показать, во что разворачиваются указанные в запросе условия.
Предварительные действия закончены, давайте теперь поработаем с операторами. Попробуем выбрать все записи, которые входят в набор (1, 2, NULL) :
Попробуем теперь с NOT IN :
Вообще ни одной записи! Давайте разберёмся, почему тройка не попала в результаты запроса. Посчитаем вручную фильтр, который применила СУБД, для случая A=3 :
Из-за особенностей трёхзначной логики NOT IN вообще не дружит с NULLами: как только NULL попал в условия отбора, данных не ждите.
NULL и пустая строка
Здесь Oracle отходит от стандарта ANSI SQL и провозглашает эквивалентность NULLа и пустой строки. Это, пожалуй, одна из наиболее спорных фич, которая время от времени рождает многостраничные обсуждения с переходом на личности, поливанием друг друга фекалиями и прочими непременными атрибутами жёстких споров. Судя по документации, Oracle и сам бы не прочь изменить эту ситуацию (там сказано, что хоть сейчас пустая строка и обрабатывается как NULL, в будущих релизах это может измениться), но на сегодняшний день под эту СУБД написано такое колоссальное количество кода, что взять и поменять поведение системы вряд ли реально. Тем более, говорить об этом они начали как минимум с седьмой версии СУБД (1992-1996 годы), а сейчас уже двенадцатая на подходе.
NULL и пустая строка эквивалентны:
непременный атрибут жёсткого спора:
Длина пустой строки не определена:
Сравнение с пустой строкой невозможно:
Критики подхода, предлагаемого Ораклом, говорят о том, что пустая строка не обязательно обозначает неизвестность. Например, менеджер по продажам заполняет карточку клиента. Он может указать его контактный телефон (555-123456), может указать, что он неизвестен (NULL), а может и указать, что контактный телефон отсутствует (пустая строка). С оракловым способом хранения пустых строк реализовать последний вариант будет проблемно. С точки зрения семантики довод правильный, но у меня на него всегда возникает вопрос, полного ответа на который я так и не получил: как менеджер введёт в поле «телефон» пустую строку и как он в дальнейшем отличит его от NULLа? Варианты, конечно, есть, но всё-таки…
Вообще-то, если говорить про PL/SQL, то где-то глубоко внутри его движка пустая строка и NULL различаются. Один из способов увидеть это связан с тем, что ассоциативные коллекции позволяют сохранить элемент с индексом » (пустая строка), но не позволяют сохранить элемент с индексом NULL:
Использовать такие финты ушами на практике не стоит. Во избежание проблем лучше усвоить правило из доки: пустая строка и NULL в оракле неразличимы.
Математика NULLа
Этот маленький абзац писался пятничным вечером под пиво, на фоне пятничного РЕН-ТВшного фильма. Переписывать его лень, уж извините.
Очевидно, что мы ничем не сможем помочь Коле: неизвестное количество любовников Маши до замужества сводит все расчёты к одному значению — неизвестно. Oracle, хоть и назвался оракулом, в этом вопросе уходит не дальше, чем участники битвы экстрасенсов: он даёт очевидные ответы только на очевидные вопросы. Хотя, надо признать, что Oracle гораздо честнее: в случае с Колей он не будет заниматься психоанализом и сразу скажет: «я не знаю»:
С конкатенацией дела обстоят по другому: вы можете добавить NULL к строке и это её не изменит. Такая вот политика двойных стандартов.
NULL и агрегатные функции
Таблица с данными. Используется ниже много раз:
Пустые значения игнорируются агрегатами:
Набор данных только из NULLов:
Пустой набор данных:
NULL в OLAP
Удобная фишка sqlplus: при выводе данных заменяет NULL на указанную строку:
Проверяем дуализм NULLа в многомерном кубе:
Разница между нулевой и пустой («») строкой Java
В чем разница между null и «» (пустая строка)?
Я написал простой код:
Однако null означает, что переменная String ни на что не указывает.
a.equals(b) возвращает false, потому что «» не равно нулю, очевидно.
Разница заключается в том, что, поскольку «» является действительной строкой, вы все равно можете вызывать методы или функции, например:
Если String равно null, как b, Java выдаст a, NullPointerException если вы попытаетесь вызвать, скажем:
Если разница, которая вас интересует, равна == против равных, то это:
== сравнивает ссылки, как будто я пошел
Это вывело бы false, потому что я выделил два разных объекта, а a и b указывают на разные объекты.
Однако a.equals(b) в этом случае будет возвращено значение true, поскольку equals для Strings будет возвращаться значение true в том и только в том случае, если аргумент String не является нулевым и представляет одинаковую последовательность символов.
Однако следует помнить, что в Java есть особый случай для строк.
Вы также можете понять разницу между нулевой и пустой строкой следующим образом:
Строка является объектом и может быть нулевой
null означает, что объект String не был создан
Это может быть более полезным, чтобы попытаться:
вот мой аналогичный ответ
null означает, что имя не ссылается ни на один экземпляр объекта. «» означает пустую строку.
Здесь a ссылается на некоторый объект, который оказывается пустой строкой. b не ссылается ни на какой объект, так как он нулевой.
«» и null оба отличаются. первый означает, что как часть объявления строковой переменной в строковом пуле была создана строковая константа, и для нее было выделено некоторое количество памяти.
Пустая строка отличается от пустой ссылки тем, что в объектно-ориентированном языке программирования нулевая ссылка на строковый тип не указывает на строковый объект и приведет к ошибке, если попытаться выполнить над ним какую-либо операцию. Пустая строка по-прежнему является строкой, на которой можно пытаться выполнить строковые операции.
Строка не инициализируется для нуля. если какая-либо строковая операция пробовала, она может выдать исключение нулевого указателя
Это строковый литерал со значением string «null», аналогичным t = «xyz». Это не будет бросать нулевой указатель.
Это как пустая строка, она не будет выбрасывать нулевой указатель.
Теперь выполните это: 0/7. Вы получите вывод 0. Это означает, что операция возможна и может быть выполнена, но вы ответили просто 0, потому что после деления ничего не осталось. Есть допустимый вывод, и этот вывод равен нулю.
В первом примере выходные данные были не только недействительными, но и не могли быть выполнены. Это похоже на null строку в Java. Второй пример похож на empty строку.
Это означает, что существует переменная ‘a’ типа string, которая указывает на ссылку на объект в пуле строк, которая имеет значение «». Поскольку переменная a содержит допустимую ссылку на строковый объект, все методы строки могут быть применены здесь.
Тогда как когда ты пишешь
Теперь давайте оценим приведенные ниже выражения.
Когда использовать NULL, а когда использовать пустую строку?
Мне интересны в основном MySQL и PostgreSQL, но вы можете ответить на следующие вопросы в целом:
Допустим, запись поступает из формы для сбора информации об имени и адресе. Строка 2 адреса, как правило, будет пустой, если пользователь не живет в квартире. Пустая строка в этом случае совершенно корректна. Я предпочитаю использовать NULL для обозначения того, что значение неизвестно или не указано.
Я не верю, что на практике стоит беспокоиться о разнице в физической памяти. Как администраторы базы данных, мы должны жарить гораздо большую рыбу!
Я не знаю о MySQL и PostgreSQL, но позвольте мне немного об этом поговорить.
Существует одна СУБД, а именно Oracle, которая не позволяет выбирать пользователей между NULL и ». Это ясно демонстрирует, что нет необходимости различать оба. Есть некоторые досадные последствия:
Вы устанавливаете varchar2 в пустую строку следующим образом:
следующее приводит к тому же результату
Но чтобы выбрать столбцы, в которых значение пусто или равно NULL, необходимо использовать
синтаксически правильно, но никогда не возвращает строку.
С другой стороны, при объединении строк в Oracle. NULL varchars обрабатываются как пустые строки.
Если вы хотите явно указать, что значение назначено, вы должны использовать что-то вроде ».
И вам нужно беспокоиться, приведет ли обрезка к пустым значениям в NULL
Теперь посмотрим на СУБД, где » не совпадает с NULL (например, SQL-сервер)
Работать с », как правило, проще, и в большинстве случаев нет практической необходимости различать оба. Одно из исключений, которое я знаю, это когда ваш столбец представляет некоторые настройки, и у вас нет пустых значений по умолчанию для них. Когда вы можете различить » и NULL, вы можете указать, что ваш параметр пуст и избежать применения по умолчанию.