Это разные языки, и разные языки могут иметь разную семантику! В C или C ++ NULL
на самом деле является просто макросом препроцессора, либо определенным как 0
, либо выражением, которое создает нулевой указатель (((void*)0)
). Кроме того, C ++ (но не C!) Поставляется с ключевым словом нулевого указателя (nullptr
, начиная с C ++ 11), которое в настоящее время следует отдавать предпочтение макросу или целочисленному литералу 0
.
Затем вВ C и C ++ вы можете напрямую проверять числа (целые или с плавающей запятой) и указатели. Все, что сравнивается с 0, принимается как false
, все остальное принимается как true
. Например:
int n = 0;
int* p = nullptr; // C++ only, 0 or NULL in C
double d = 0.0;
if(n) { }
if(p) { }
if(d) { }
// all of these are equivalent to if(x != 0), x being n, p or d
Похоже, вы можете также проверять литералы (все, что ниже, фактически никогда не входят в ветвь if):
if(false) { }
if(0) { }
if(nullptr) { }
Java, напротив, только принимает истинные логические значения. Так что то, что подразумевается в C или C ++, должно быть написано явно в Java (и, возможно, Lua, но я не знаком с ним):
if(someBoolean) { } // fine, as boolean already
if(someInt != 0) { }
if(someReference != null) { }
Примечание: есть еще некоторые другие языки, которые используют C /Семантика C ++, например, Python или JavaScript.