obj == null
和 null == obj
这两种写法都是用于检查一个对象是否为 null 的表达式,它们在功能上是完全等价的,但有一些细微的差别。
obj == null
null == obj
null == obj
这种写法?主要原因是为了防止在某些语言中(特别是C/C++)出现意外的赋值操作:
// 错误写法,但编译器可能不会报错
if (obj = null) {
// 这实际上是将null赋值给obj,而不是比较
}
// 使用Yoda风格可以避免这个问题
if (null = obj) { // 这里编译器会报错,因为不能给常量赋值
// ...
}
在大多数现代语言(如Java、C#、JavaScript等)中,这种写法已经不那么必要了,因为:
if (obj = null)
会直接产生编译错误null == obj
来避免赋值错误obj == null
// Java示例
String obj = null;
// 常规写法
if (obj == null) {
System.out.println("对象是null");
}
// Yoda写法(不推荐在Java中使用)
if (null == obj) {
System.out.println("对象是null");
}
// JavaScript示例
let obj = null;
// 推荐写法
if (obj === null) {
console.log("对象是null");
}
// 不推荐的Yoda写法
if (null === obj) {
console.log("对象是null");
}
两者在功能上没有区别,选择哪种写法主要取决于:
在现代编程实践中,obj == null
通常是更推荐的做法,除非在特定语言或环境中需要防止赋值错误。