Страницы

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

вторник, 31 декабря 2019 г.

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

#java #null


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

if(obj ==null){}


или 

if(null == obj){}


в чем разница?

и вторая часть вопроса можно ли это заменить на 

static boolean  isNull(boolean val)


или нет? и что это такое?
    


Ответы

Ответ 1



Особой разницы нет. Но есть не особая. Вариант с 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 выглядит коряво, но это дело вкуса.

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

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