Что такое null java

Что такое null в Java?

Is null экземпляр чего-либо?

что значит null принадлежит?

как он представлен в памяти?

14 ответов

является ли null экземпляром чего-либо?

15.20.2 Тип Оператора Сравнения instanceof

к какому набору принадлежит’ null’?

JLS 4.1 виды типов и значений

как говорится в приведенной выше цитате JLS, на практике вы можете просто притвориться, что это»просто специальный литерал, который может быть любого ссылочного типа».

В Java, null == null (это не всегда так на других языках). Обратите внимание также, что по договору он также имеет это специальное свойство (от java.lang.Object ):

public boolean equals(Object obj)

это тоже значение по умолчанию (для переменных, которые имеют их) для всех ссылочных типов:

JLS 4.12.5 начальные значения переменных

как это зависит. Вы можете использовать его, чтобы включить то, что называется ленивая инициализация полей, где поле будет иметь начальное значение null пока он фактически не используется, где он заменяется «реальным» значением (которое может быть дорогостоящим для вычисления).

есть и другие использует. Возьмем реальный пример из java.lang.System :

это очень распространенный шаблон использовать: null используется для обозначения несуществования объекта.

вот еще один пример использования, на этот раз из java.io.BufferedReader :

public String readLine() throws IOException

возвращает: A String содержит содержимое строки, не включая символы завершения строки, или null если достигнут конец потока.

здесь readLine() вернутся instanceof String для каждой строки, пока наконец не возвращает null чтобы обозначить конец. Это позволяет обрабатывать каждую строку следующим образом:

давайте возьмем другой пример, на этот раз с java.util.Map :

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

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

вы можете прочитать остальную часть API и найти, где и как есть. Имейте в виду, что они не всегда лучшие практики примеры.

вообще говоря, null используются в качестве специального значения для обозначьте:

как это представлено в памяти?

В Java? Не твое дело. И так будет лучше.

Is null хорошая вещь?

это теперь пограничный субъективный. Некоторые говорят, что null вызывает много ошибок программиста, которых можно было бы избежать. Некоторые говорят, что на языке, который ловит NullPointerException как Java, хорошо использовать его, потому что вы будете быстро терпеть неудачу при ошибках программиста. Некоторые люди избегают null С помощью Null шаблон объекта, etc.

это огромная тема сама по себе, поэтому лучше всего обсудить ее как ответ на другой вопрос.

я называю это своей миллиардной ошибкой. это было изобретение null ссылка в 1965 году. В то время я разрабатывал первую комплексную систему типов для ссылок на объектно-ориентированном языке (ALGOL W). Моя цель состояла в том, чтобы убедиться, что все использование ссылок должно быть абсолютно безопасным, а проверка выполняется автоматически компилятором. Но я не мог устоять перед искушением вставить:—2—> ссылка, просто потому, что это было так легко осуществить. Это привело к бесчисленным ошибкам, уязвимостям и сбоям системы, которые, вероятно, причинили миллиард долларов боли и ущерба за последние сорок лет.

на видео-презентации идет глубже; это рекомендуемые часы.

является ли null экземпляром чего-либо?

к какому набору принадлежит ‘null’?

это один и единственный член типа null, где тип null определяется следующим образом:

» существует также специальный тип null, тип выражения null, который не имеет имени. Поскольку тип null не имеет имени, невозможно объявить переменную типа null или привести к типу null. Ссылка null является единственным возможным значением выражения типа null. Нулевая ссылка всегда может быть приведена к любому ссылочному типу. На практике программист может игнорировать тип null и просто притворяться, что null является просто специальным литерал, который может быть любого ссылочного типа.» JLS 4.1

см. выше. В некоторых контекстах, null используется для обозначения «нет объекта» или «неизвестно» или «недоступно», но эти значения специфичны для приложения.

это конкретная реализация, и вы не сможете увидеть представление null в чистом Java программа. (Но null представлен как нулевой адрес / указатель машины в большинстве, если не во всех реализациях Java.)

что такое null?

является ли null экземпляром чего-либо?

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

к какому набору принадлежит null?

нет никакого набора

как он представлен в памяти?

Если некоторые ориентиры к нему, как:

в памяти кучи некоторое пространство, назначенное new созданный объект. И o укажет на это место в памяти.

Это означает, что теперь не будет указывать, что область памяти объекта.

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

ключевое слово null является литералом, представляющим пустую ссылку, тот, который не относится ни к одному объекту. null-значение по умолчанию для переменных ссылочного типа.

также возможно посмотреть

в зависимости от параметров компилятора и модели памяти. NULL не является, строго говоря, частью самого C / C++.

null не является экземпляром какого-либо класса.

однако вы можете назначить null переменным любого типа (объекта или массива):

null является специальным значением, это не экземпляр ничего. По очевидной причине этого не может быть instanceof ничего.

представление байт-кода

в Java null имеет прямую поддержку JVM: для ее реализации используются три инструкции:

Глава 6 «Набор Инструкций Виртуальной Машины Java» затем упоминает последствия null на других инструкции: он бросает!—9—> для многих из них.

2.4. «Ссылочные типы и значения» также упоминает null в общих чертах:

ссылочное значение также может быть специальной нулевой ссылкой, ссылкой на объект no, которая будет обозначаться здесь null. Нулевая ссылка изначально не имеет типа времени выполнения, но может быть приведена к любому типу. По умолчанию значение типа null.

Источник

Что такое нуль в Java?

Это null пример чего-либо?

К какому набору null относится?

Как это представлено в памяти?

Является ли null экземпляром чего-либо?

15.20.2 Оператор сравнения типов instanceof

К какому набору принадлежит «ноль»?

JLS 4.1 Виды типов и значений

Как сказано в приведенной выше цитате JLS, на практике вы можете просто притвориться, что это «просто специальный литерал, который может иметь любой ссылочный тип».

В Java null == null (это не всегда так в других языках). Также обратите внимание, что по контракту оно также имеет это специальное свойство (from java.lang.Object ):

public boolean equals(Object obj)

Это также значение по умолчанию (для переменных, у которых они есть) для всех ссылочных типов:

JLS 4.12.5 Начальные значения переменных

Как это используется, варьируется. Вы можете использовать его, чтобы включить так называемую ленивую инициализацию полей, где поле будет иметь свое начальное значение null до момента его фактического использования, где оно будет заменено «реальным» значением (которое может быть дорогим для вычисления).

Есть и другие варианты использования. Давайте возьмем реальный пример из java.lang.System :

Это очень распространенный шаблон использования: null используется для обозначения несуществования объекта.

Вот еще один пример использования, на этот раз из java.io.BufferedReader :

public String readLine() throws IOException

Возвраты : A, String содержащий содержимое строки, не включая символы окончания строки, или null если достигнут конец потока.

Так что здесь, readLine() будет возвращаться instanceof String для каждой строки, пока он, наконец, не вернет a, null чтобы обозначить конец. Это позволяет обрабатывать каждую строку следующим образом:

Давайте возьмем другой пример, на этот раз из java.util.Map :

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

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

Вообще говоря, null используются как специальные значения для обозначения:

Как это представлено в памяти?

На яве? Не твоя забота. И лучше всего так держать.

Это null хорошая вещь?

Это сейчас пограничный субъективный. Некоторые люди говорят, что это null вызывает много ошибок программиста, которых можно было бы избежать. Некоторые говорят, что на языке, который ловит NullPointerException как Java, хорошо использовать его, потому что вы будете быстро отказывать в ошибках программиста. Некоторые люди избегают null использования шаблона объекта Null и т. Д.

Это огромная тема сама по себе, поэтому ее лучше обсуждать как ответ на другой вопрос.

Я закончу это цитатой из изобретателя самого null себя, CAR Hoare (быстрой славы):

Я называю это моей ошибкой в ​​миллиард долларов. Это было изобретение null ссылки в 1965 году. В то время я разрабатывал первую комплексную систему типов для ссылок на объектно-ориентированном языке (ALGOL W). Моя цель состояла в том, чтобы гарантировать, что любое использование ссылок должно быть абсолютно безопасным, с проверкой, выполняемой автоматически компилятором. Но я не мог удержаться от соблазна вставить null ссылку просто потому, что это было легко реализовать. Это привело к бесчисленным ошибкам, уязвимостям и сбоям системы, которые, вероятно, причинили миллиард долларов боли и ущерба за последние сорок лет.

Видео этой презентации идет глубже; это рекомендуемые часы.

Источник

What is null in Java?

Is null an instance of anything?

What set does null belong to?

How is it represented in the memory?

14 Answers 14

Is null an instance of anything?

15.20.2 Type Comparison Operator instanceof

JLS 4.1 The Kinds of Types and Values

As the JLS quote above says, in practice you can simply pretend that it’s «merely a special literal that can be of any reference type».

In Java, null == null (this isn’t always the case in other languages). Note also that by contract, it also has this special property (from java.lang.Object ):

public boolean equals(Object obj)

It is also the default value (for variables that have them) for all reference types:

JLS 4.12.5 Initial Values of Variables

How this is used varies. You can use it to enable what is called lazy initialization of fields, where a field would have its initial value of null until it’s actually used, where it’s replaced by the «real» value (which may be expensive to compute).

There are also other uses. Let’s take a real example from java.lang.System :

This is a very common use pattern: null is used to denote non-existence of an object.

Here’s another usage example, this time from java.io.BufferedReader :

public String readLine() throws IOException

Returns: A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached.

So here, readLine() would return instanceof String for each line, until it finally returns a null to signify the end. This allows you to process each line as follows:

Let’s take another example, this time from java.util.Map :

Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.

Here we start to see how using null can complicate things. The first statement says that if the key isn’t mapped, null is returned. The second statement says that even if the key is mapped, null can also be returned.

You can read through the rest of the APIs and find where and how null is used. Do keep in mind that they aren’t always the best practice examples.

Generally speaking, null are used as a special value to signify:

How is it represented in the memory?

In Java? None of your concern. And it’s best kept that way.

Is null a good thing?

This is now borderline subjective. Some people say that null causes many programmer errors that could’ve been avoided. Some say that in a language that catches NullPointerException like Java, it’s good to use it because you will fail-fast on programmer errors. Some people avoid null by using Null object pattern, etc.

This is a huge topic on its own, so it’s best discussed as answer to another question.

I will end this with a quote from the inventor of null himself, C.A.R Hoare (of quicksort fame):

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.

The video of this presentation goes deeper; it’s a recommended watch.

Источник

Что такое null в Java?

Является ли null экземпляром чего-либо?

В чем набор null принадлежит?

Как он представлен в памяти?

ОТВЕТЫ

Ответ 1

Является ли null экземпляром чего-либо?

15.20.2 Оператор сравнения типов instanceof

JLS 4.1 Виды типов и значений

Как сказано выше в JLS-цитате, на практике вы можете просто притвориться, что это «просто специальный литерал, который может быть любого ссылочного типа».

В Java null == null (это не всегда происходит на других языках). Заметим также, что по контракту он также обладает этим специальным свойством (от java.lang.Object ):

public boolean equals(Object obj)

Это также значение по умолчанию (для переменных, которые есть у них) для всех типов ссылок:

JLS 4.12.5 Начальные значения переменных

Как это используется, меняется. Вы можете использовать его, чтобы включить то, что называется ленивой инициализацией полей, где поле будет иметь начальное значение null до тех пор, пока оно фактически не будет использовано, где оно будет заменено на «реальное» значение (которое может быть дорогостоящим для вычисления).

Существуют и другие виды использования. Возьмем настоящий пример из java.lang.System :

Это очень распространенный шаблон использования: null используется для обозначения несуществующего объекта.

Вот еще один пример использования, на этот раз из java.io.BufferedReader :

public String readLine() throws IOException

Возьмем еще один пример, на этот раз из java.util.Map :

Вообще говоря, null используются как специальное значение для обозначения:

В Java? Ничего из вас. И это лучше всего сохранилось.

Есть ли null хорошая вещь?

Это огромная тема сама по себе, поэтому ее лучше обсудить как ответ на другой вопрос.

Я закончу это цитатой самого изобретателя null C.A.R Hoare (для быстрой сортировки):

Я называю это своей ошибкой в ​​миллиард долларов. Это было изобретение справочника null в 1965 году. В то время я разрабатывал первую всеобъемлющую систему типов для ссылок в объектно-ориентированном языка (ALGOL W). Моя цель состояла в том, чтобы гарантировать, что все использование ссылок должно быть абсолютно безопасным, причем проверка выполняется автоматически компилятором. Но я не мог удержаться от соблазна поставить ссылку null просто потому, что ее было так легко реализовать. Это привело к бесчисленным ошибкам, уязвимостям и сбоям системы, которые, вероятно, вызвали миллиард долларов боли и ущерба за последние сорок лет.

Видео этой презентации идет глубже; это рекомендуемые часы.

Ответ 2

Является ли null экземпляром чего-либо?

Он является единственным и единственным членом нулевого типа, где нулевой тип определяется следующим образом:

См. выше. В некоторых контекстах null используется для обозначения «no object» или «unknown» или «unavailable», но эти значения являются специфичными для приложения.

Это специфичная реализация, и вы не сможете увидеть представление null в чистой программе Java. (Но null представляется как нулевой машинный адрес/указатель в большинстве, если не во всех реализациях Java.)

Ответ 3

Что такое null?

Является ли null экземпляром чего-либо?

Нет, как ничто. Это не может быть примером какой-либо вещи.

Какой набор имеет значение null?

Нет никакого набора

Как он представлен в памяти?

Если некоторые ориентиры указывают на это как:

В памяти кучи некоторое пространство присваивается новому созданному объекту. И o укажет на выделенное место в памяти.

Это означает, что теперь o не будет указывать на это пространство памяти объекта.

Ответ 4

Нет, это не экземпляр ничего, instanceof всегда будет false.

Ответ 5

Также, возможно, посмотрите

Ответ 6

в зависимости от параметров модели компилятора и модели памяти. NULL не является, строго говоря, частью самого C/С++.

В Java ™ «null» не является ключевым словом, а является специальным литералом типа null. Его можно использовать для любого ссылочного типа, но не для любого примитивного типа, такого как int или boolean. Нулевой литерал необязательно имеет значение 0. И невозможно применить к типу null или объявить переменную этого типа.

Ответ 7

Null не является экземпляром любого класса.

Однако вы можете присвоить значение null переменным любого типа (объекта или массива):

Ответ 8

Ответ 9

Ответ 10

Представление байткода

null имеет прямую поддержку JVM: для ее реализации используются три команды:

Глава 6 «Набор инструкций виртуальной машины Java» затем описывает эффекты null в других инструкциях: он выдает NullPointerException для многих из них.

2.4. «Типы ссылок и значения» также упоминает null в общих терминах:

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

Ответ 11

Интересным способом увидеть null в java, на мой взгляд, является его просмотр как нечто, что НЕ означает отсутствие информации, а просто как буквальное значение, которое может быть присвоено ссылке любого типа. Если вы думаете об этом, если обозначить отсутствие информации, то для a1 == a2 быть истинным не имеет смысла (в случае, если им было присвоено значение null), поскольку они действительно могли бы указывать на ЛЮБОЙ объект (мы просто не знаю, на какие объекты они должны указывать). Кстати null == null возвращает true в java. Если java, например. будет похоже на SQL: 1999, тогда null == null вернет неизвестный (логическое значение в SQL: 1999 может принимать три значения: true, false и неизвестно, но на практике неизвестно реализовано как null в реальных системах). http://en.wikipedia.org/wiki/SQL

Ответ 12

В Java существуют две основные категории типов: примитивная и ссылка. Переменные, объявленные значения хранилища примитивного типа; переменные, объявленные ссылками хранилища ссылочного типа.

В этом случае оператор инициализации объявляет переменные «x». «x» хранит ссылку на String. Здесь null. Прежде всего, null не является допустимым экземпляром объекта, поэтому для него не выделяется память. Это просто значение, указывающее, что ссылка на объект в настоящее время не ссылается на объект.

Ответ 13

Короткий и точный ответ, который формально отвечает на все ваши вопросы из JLS:

Тип null имеет одно значение, нулевую ссылку, представленную null literal null, который формируется из символов ASCII.

Нулевой литерал всегда имеет нулевой тип.

Выделяется только ссылка типа, присвоенного нулевому значению. Вы не присваиваете ссылку на значение (объект). Такое распределение специфично для JVM, сколько ссылок потребуется и в какой области памяти будет выделено.

Ответ 14

null в Java аналогичен/аналогичен nullptr в С++.

Такая же программа в Java:

Теперь вы понимаете из кодов выше, что является нулевым в Java? Если нет, то я рекомендую вам изучить указатели на C/С++, а затем вы поймете.

Обратите внимание, что в C, в отличие от С++, nullptr является undefined, но вместо него используется NULL, который также может использоваться и на С++, но в С++ nullptr более предпочтителен, чем просто NULL, потому что NULL в C всегда связанный с указателями, и что он, поэтому в С++ суффикс «ptr» был добавлен к концу слова, а также все буквы теперь имеют строчные буквы, но это менее важно.

В С++ вы можете использовать указатели и значение nullptr для необязательных членов/переменных, то есть член/переменная, которая не имеет значения, и если она не имеет значения, то она равна nullptr, поэтому как null в Например, Java может использоваться.

Источник

9 вещей о NULL в Java

Почему Вы должны узнать о null в Java?

Что есть null в Java

Зачастую, с этим встречаются программисты, перешедшие с других языков программирования, но при использовании современных IDE проблема становится незначительной. В наши дни, IDE вроде Eclipse или NetBeans могут исправлять эту ошибку пока Вы набираете код, но в эпоху Notepad, Vim и Emacs, это была распространенная проблема, которая могла съесть кучу драгоценного времени.

Так же, как каждый примитив имеет значение по умолчанию, например, у int это 0, у boolean это false, null это значение по умолчанию любых ссылочных типов, проще говоря, для всех объектов. Так же, как при создании логической переменной ее значение по умолчанию равно false, так и любые ссылочные переменные в Java по умолчанию будут равны null. Это истинно для всех типов переменных: переменной-члена или локальной переменной, переменной экземпляра или статической переменной, кроме того, компилятор будет ругаться, если Вы используете локальную переменную не проинициализировав ее.

Несмотря на распространенное заблуждение, null это не объект ( Object ) и ни тип. Это просто специальное значение, которое может быть назначено любому ссылочному типу, и Вы можете привести null к любому типу, как показано ниже:

Как Вы можете видеть, когда мы непосредственно присваиваем null примитиву, то получаем ошибку процесса компиляции, но, если присвоить null объекту класса-обертки, а затем присвоить этот объект соответствующему примитивному типу, компилятор не отреагирует, но мы будем вознаграждены null pointer exception во время выполнения. Это происходит из-за авто упаковки ( autoboxing ) в Java, и мы еще встретимся с ним в следующем пункте.

Но, когда Вы запустите данный фрагмент кода, в консоли Вы увидите

Оператор instanceof будет возвращать false если в качестве параметра указать любую ссылочную переменную со значением null или null сам по себе. Пример:

Вы можете послать null в качестве параметра метода, принимающего любой ссылочный тип, к примеру:

может быть вызван как

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *