首页
学习
活动
专区
圈层
工具
发布

obj == null vs null == obj

比较 obj == nullnull == obj

基础概念

这两种写法都是用于检查一个对象是否为 null 的表达式,它们在功能上是完全等价的,但有一些细微的差别。

详细比较

obj == null

  • 这是更常见、更自然的写法
  • 符合人类的阅读习惯("如果对象等于null")
  • 在大多数现代编程语言中都可以使用
  • 如果obj是null,表达式返回true;否则返回false

null == obj

  • 被称为"Yoda条件"或"Yoda风格"的写法
  • 将常量放在比较运算符的左侧
  • 在某些语言中可以防止意外的赋值操作

为什么存在null == obj这种写法?

主要原因是为了防止在某些语言中(特别是C/C++)出现意外的赋值操作:

代码语言:txt
复制
// 错误写法,但编译器可能不会报错
if (obj = null) { 
    // 这实际上是将null赋值给obj,而不是比较
}

// 使用Yoda风格可以避免这个问题
if (null = obj) { // 这里编译器会报错,因为不能给常量赋值
    // ...
}

现代语言中的情况

在大多数现代语言(如Java、C#、JavaScript等)中,这种写法已经不那么必要了,因为:

  1. 这些语言中if (obj = null)会直接产生编译错误
  2. IDE和编译器会有更好的类型检查和警告
  3. 代码可读性更重要

最佳实践建议

  1. 在C/C++中,可以考虑使用null == obj来避免赋值错误
  2. 在Java、C#、JavaScript等语言中,建议使用更自然的obj == null
  3. 保持团队代码风格一致最重要

示例代码

代码语言:txt
复制
// Java示例
String obj = null;

// 常规写法
if (obj == null) {
    System.out.println("对象是null");
}

// Yoda写法(不推荐在Java中使用)
if (null == obj) {
    System.out.println("对象是null");
}
代码语言:txt
复制
// JavaScript示例
let obj = null;

// 推荐写法
if (obj === null) {
    console.log("对象是null");
}

// 不推荐的Yoda写法
if (null === obj) {
    console.log("对象是null");
}

总结

两者在功能上没有区别,选择哪种写法主要取决于:

  1. 使用的编程语言特性
  2. 团队编码规范
  3. 个人/团队偏好
  4. 可读性考虑

在现代编程实践中,obj == null通常是更推荐的做法,除非在特定语言或环境中需要防止赋值错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 还只会 null != obj 判空,10招让你彻底告别空指针异常!

    示例 Objects.isNull 判断对象是否为空,为null返回true,否则返回false Object obj = null; System.out.println(Objects.isNull...(obj)); // true obj = new Object(); System.out.println(Objects.isNull(obj)); // false Objects.nonNull...和Objects.isNull相反;判断对象不为空,为null返回false,否则返回true Object obj = null; System.out.println(Objects.nonNull...(obj)); // false obj = new Object(); System.out.println(Objects.nonNull(obj)); // true Objects.requireNonNull...校验非空,一旦对象为空,就会抛出空指针异常(NullPointerException),改方法可以自定义异常描述,方便异常之后能快速定位问题所在: Object obj = null; Objects.requireNonNull

    1.2K20

    =null

    吐槽完毕,回到这个题目本身,进行判空前,请区分以下两种情况: null 是一个有效有意义的返回值(Where null is a valid response in terms of the contract...你要感知到这个情况,告诉调用方“嘿,哥们,你传个null给我做甚"。...第1种情况会更复杂一些 这种情况下,null是个”看上去“合理的值,例如,我查询数据库,某个查询条件下,就是没有对应值,此时null算是表达了“空”的概念。...解决这个问题的一个方式,就是使用Null Object pattern(空对象模式) 我们来改造一下 类定义如下,这样定义findAction方法后,确保无论用户输入什么,都不会返回null对象: public...如果你想返回null,请停下来想一想,这个地方是否更应该抛出一个异常。

    1.1K20

    null == undefined ?

    最近在看《JavaScript高级程序设计》一书,书中讲到相等操作符(==)时说,要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,但要记住 null == undefined...,从而理解两者为何会相等: Undefined 和 Null 是 Javascript 中两种特殊的原始数据类型(Primary Type),它们都只有一个值,分别对应 undefined 和 null...当一个对象被赋值了null 以后,原来的对象在内存中就处于游离状态,GC 会择机回收该对象并释放内存。因此,如果需要释放某个对象,就将变量设置为null,即表示该对象已经被清空,目前无效状态。...与 null 相关的另外一个问题需要解释一下: typeof null == 'object' null 有属于自己的类型 Null,而不属于Object类型,typeof 之所以会判定为 Object...不要试图通过转换数据类型来解释这个结论,因为: Number(null); // 0 Number(undefined); // NaN //在比较相等性之前,null 没有被转换为其他类型 null

    2.8K20

    MySQL字段null和not null学习思考

    除非有特别的原因使用NULL值,应该总是让字段保持not null。 空值跟NULL是两个概念 (1)空值不占用空间 (2)MYSQL中NULL其实是占用空间的。...在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关键字。...你应该用0、一个特殊值或者一个空串代替NULL。(影响索引效率的原因:NULL不是空值,而是要占用空间,所以MYSQL进行比较的时候,NULL会参与字段比较,所以对效率有一部分影响。...且B树索引不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。)...,否则就难以区分到底是没有关联记录还是其他情况 数据库的字段设置NOT NULL,仅仅说明该字段不能为NULL,只有在插入数据为NULL的情况下会报错。

    3.2K20

    oracle中is not null,oracle之is null和is not null的优化「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君 oracle之优化is null语句 一:is null的优化 方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。...具体实现条件则是:i is null j = nvl(i,j); 注意:使用时必须要确保字段的数据不包含j,例如:(age,15)=15,此时有可能age 内容是15,此时不可以,j的值要变换...当然还有另外一种方式解决这个问题:将null包含到索引中 –使用nvl函数的方式(不用添加索引,推荐) select * from student t where 1=nvl(t.age,1); –当t.age...不存在等于1的数据时等价于 –select * from student t where t.age is null; –添加索引的方式 create index idx_age_x on tab_i(...decode(age,null,1)); select * from student t where decode(t.age,null,1)=1; 二:is not null的优化 方法:结果集不包含

    3.9K31
    领券