Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

как правильно сравнивать с null?

как правильно писать
if(obj ==null){}
или
if(null == obj){}
в чем разница?
и вторая часть вопроса можно ли это заменить на
static boolean isNull(boolean val)
или нет? и что это такое?


Ответ

Особой разницы нет. Но есть не особая. Вариант с
if(null == obj)
уберегает вас от распространенной ошибки типа
if(obj = null)
то есть случая, когда вместо сравнения по недосмотру выполняется присваивание. В случае с null = obj компилятор сообщит об ошибке, поскольку нельзя присваивать что-то null'у. Все вроде бы здорово, и отличие вроде бы и правда есть. Но это замечательное преимущество практически не имеет никакой ценности, поскольку будет работать только в том случае, если obj имеет тип Boolean. В остальных случаях компилятор тоже догадается сообщить об ошибке, поскольку результат такого присваивания не может быть приведен к булевскому типу. Поэтому в java разницы нет практически никакой. А вот в Си это может иметь смысл - там NULL - это всего лишь макрос, под которым обычно скрывается 0, и ошибки типа
if(obj = NULL)
довольно распространены, так как присваивание указателю NULL'а вполне допустимо, а случайно написать = вместо == - дело нехитрое. Может такая ошибка случиться и в JavaScript в силу того, что типизация в нем динамическая, и любую переменную можно неявно привести к булевскому значению. С другой стороны, в js чаще принято писать условия типа
if(!obj)
вместо
if(obj == null)
хотя так делают далеко не все. На мой взгляд конструкция типа null == obj выглядит коряво, но это дело вкуса.

Комментариев нет:

Отправить комментарий