String x = (String) null;
Почему нет исключения в этом утверждении?
String x = null;
System.out.println(x);
Это печатает null
. Но .toString()
метод должен выдать исключение нулевого указателя.
String x = (String) null;
Почему нет исключения в этом утверждении?
String x = null;
System.out.println(x);
Это печатает null
. Но .toString()
метод должен выдать исключение нулевого указателя.
Ответы:
Вы можете привести
null
к любому типу ссылки без каких-либо исключений.println
Метод не бросает пустой указатель , поскольку он сначала проверяет , является ли объект пустым или нет. Если ноль, то он просто печатает строку"null"
. В противном случае он вызоветtoString
метод этого объекта.Добавление более подробной информации: внутренняя печать методов вызывает
String.valueOf(object)
метод для объекта ввода. И вvalueOf
методе эта проверка помогает избежать исключения нулевого указателя:Во избежание путаницы, вызов любого метода для нулевого объекта должен вызвать исключение нулевого указателя, если не особый случай.
источник
Вы можете привести
null
к любому типу ссылки. Вы также можете вызывать методы, которые обрабатываютnull
как аргумент, например,System.out.println(Object)
делает, но вы не можете ссылаться наnull
значение и вызывать метод для него.Кстати, есть сложная ситуация, когда кажется, что вы можете вызывать статические методы для
null
значений.источник
t.yield() -> Thread.yeld()
все равно «оптимизирует» его ? Подобно тому, какfinal int i = 1; while (i == 1)
оптимизировано дляwhile(true)
Это по замыслу. Вы можете привести
null
к любому типу ссылки. В противном случае вы не сможете присвоить его ссылочным переменным.источник
Преобразование значений NULL требуется для следующей конструкции, где метод перегружен, и если значение NULL передается этим перегруженным методам, компилятор не знает, как устранить неоднозначность, поэтому нам необходимо типизировать NULL в следующих случаях:
В противном случае вы не могли бы вызвать метод, который вам нужен.
источник
String bar = null;
приведениеnull
значения кString
. До сих пор мне приходилось только явно приводить ноль в тесте, где метод был перегружен, и я хотел проверить его поведение с нулевым вводом. Тем не менее, приятно знать, я собирался написать аналогичный ответ, прежде чем я нашел ваш.l instanceof Long
иs instanceof String
вернусьfalse
в этих случаях.Println(Object)
использованияString.valueOf()
Print(String)
делает нулевую проверку.источник
Многие ответы здесь уже упоминают
и
Я задавался вопросом, где это указано, и посмотрел его в спецификации Java:
Нулевая ссылка всегда может быть назначена или приведена к любому типу ссылки (§5.2, §5.3, §5.5).
Если ссылка имеет значение null, она преобразуется в строку «null» (четыре символа ASCII n, u, l, l).
источник
Как написали другие, вы можете бросить null на все. Обычно вам это не нужно, вы можете написать:
без постановки там.
Но бывают случаи, когда такие броски имеют смысл:
а) если вы хотите убедиться, что вызывается определенный метод, например:
тогда это будет иметь значение, если вы введете
б) если вы собираетесь использовать свою IDE для генерации кода; например я обычно пишу модульные тесты, такие как:
Я делаю TDD; это означает, что класс "MyClassUnderTest", вероятно, еще не существует. Записав этот код, я могу затем использовать свою среду IDE, чтобы сначала сгенерировать новый класс; и затем сгенерировать конструктор, принимающий «безотносительно» аргумента «из коробки» - IDE может из моего теста выяснить, что конструктор должен принимать ровно один аргумент типа «безотносительно».
источник
Печать :
ValueOf :
Он просто вернет строку со значением "null", когда объект есть
null
.источник
Это очень удобно при использовании метода, который в противном случае был бы неоднозначным. Например: JDialog имеет конструкторы со следующими сигнатурами:
Мне нужно использовать этот конструктор, потому что я хочу установить GraphicsConfiguration, но у меня нет родителя для этого диалога, поэтому первый аргумент должен быть нулевым. С помощью
является неоднозначным, поэтому в этом случае я могу сузить вызов, приведя null к одному из поддерживаемых типов:
источник
Эта языковая функция удобна в этой ситуации.
Если memberHashMap.get ("Name") возвращает значение null, вы все равно хотите, чтобы описанный выше метод возвращал значение null без исключения. Неважно, что это за класс, ноль - ноль.
источник