if(name == null)和if(null == name)有什么讲究吗?
在C语言里面,为了防止少敲一个等号,编程人员仍然能在编译的时候找到错误。因为if(name = null)在编译的时候不会出现错误,而if(null = name)是会编译出错的。故而,采用null == name这种写法。
但是在java里面,if(name = null)是会出现编译错误的。会报如下错误:
Type mismatch: cannot convert from XXX to boolean(类型匹配错误:不能从XXX转换为boolean类型)
所以在java里面不必担心这个问题。但是,良好的编程习惯,还是写成null == name的好。
NULL与nullptr的区别
NULL是什么
NULL的实质:是个宏定义
NULL在C中就是(void*)0:
NULL在C++中就是int类型的0:
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
c++不支持隐式转换
nullptr是什么
相对于NULL有了专门的类型
nullptr的类型是nullptr_t,不是int类型
#if __cplusplus >= 201103L
typedef decltype(nullptr) nullptr_t;
#endif
相同点:
nullptr与null可以转换为任意类型的指针
不同点:
NULL不仅可以作为指针,还可以作为整数0.
但是nullptr只能是指针,不能作为0,但是仍能用做if()内判断,
它可以转换成任何指针类型和bool布尔类型(主要是为了兼容普通指针可以作为条件判断语句的写法),但是不能被转换为整数。
char *p1 = nullptr; // 正确
int *p2 = nullptr; // 正确
bool b = nullptr; // 正确. if(b)判断为false
int a = nullptr; // error
结论
如果是c++,NULL其实就是0,而不是c中的(void *) 0,c++无法进行这种隐式隐式转换,只能进行在数值类型之间的隐式转换,int,float,double
nullptr则是一种新的类型。
由此可以避免函数重载的一些问题