这个代码user==null与null==user有区别吗?

网络科技 2014-07-18 03:00:30
过去也看了不少别人的写的代码,一般判断一个对象是否为空,大部分人,还是用
if(对象==null),但也看到一些人爱用if(null==对象),虽然,这两者效果是一样的,但后者,我看了还是有点莫名的蛋疼啊,都忍不住把它调个位置啊,不知道各位有没这种感觉?

...全文
1142 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
songofwind 2015-08-09
  • 打赏
  • 举报
回复
"null==user" 的写法,主要是为了防止少写一个等号的情况,因为null不能被赋值,少些了以后一定会出编译错误;而如果写成 "if (user = null)"呢,就不能保证了,因为赋值操作也会返回一个值,如果user的类型是String,可能还是会出现编译错误,因为String不能被直接转为boolean,但如果user的类型是Boolean,那就悲催了,编译器不会认为这是个错误,最多给个警告。 当然,上面这种仅仅是预防错误,而且因为编译器够聪明,出问题的概率不大,但是”xxx“.equals(user) 的写法就非常有用了,这样可以省去一层 if (user!=null) 的判断,因为如果按正常思维顺序写 if (user.equals("xxx") 的话,一旦user为null,就会引发空指针异常。
TianChong 2014-07-20
  • 打赏
  • 举报
回复
个人觉得 null == name 比较好,一目了然,还能防错,推荐。 不过如果足够细心的,有=、==恐惧症的,完全可以按平常 name == null 方式来写,反正习惯了,就会对那个==多看几眼,防止写成=了。写C++过来的基本上都有这种检查的习惯。
rumlee 2014-07-20
  • 打赏
  • 举报
回复
引用 18 楼 a1141689135 的回复:
[quote=引用 2 楼 rumlee 的回复:] 不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
你不觉得反过来写代码更简洁吗[/quote] 写代码有时候不光是考虑简洁,也要考虑符合人的思维方式。
Fate- 2014-07-19
  • 打赏
  • 举报
回复
纠结这个干嘛 干点正事不好嘛
欢乐的小猪 2014-07-19
  • 打赏
  • 举报
回复
在java里没区别。。 防止以前c++里面if(变量=null)不报错。
william_yao 2014-07-19
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
后面那个是有区别的,使用"xxxxx".equals();这样不会出现nullpointException
vincent-Ray 2014-07-19
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
你不觉得反过来写代码更简洁吗
shine333 2014-07-18
  • 打赏
  • 举报
回复
引用 8 楼 oh_Maxy 的回复:
[quote=引用 5 楼 xzy88 的回复:] [quote=引用 2 楼 rumlee 的回复:] 不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
你说的这种情况,倒是可以理解,为了省几个字节的空间嘛,而判断为空的那种,倒着写,确实有点怪怪的。 但我习惯,也是用: if(name!=null && name.equals("lucy")) 但一般,得到name前,我都是用三目运算,判断为null时,转为""了,就不存在name.equals("lucy")出现空指针异常了[/quote] 你可以优化代码:if("lucy".equals(name)),减少判断。 常量放在前面是很多公司的编码规范,习惯了就好。[/quote] +1,user == null 和 null == user确实没区别 但是"lucy".equals(name)和name!=null && name.equals("lucy")有很大区别 1 前者利用了equals的交换律,减少了运行的代码量,且有效避免NPE 2 不要小看多写了一个 !=null 和 && 当你 if ("lucy".equals(name1) && "nancy".equals(name2) && ... && "tracy".equals(nameN))的时候,多一个!= null 和 &&就蛋疼了 当你要把if ("lucy".equals(name1) && "nancy".equals(name2) && ... && "tracy".equals(nameN))这个条件的全部等于,改成只要一个等于,或者全部不等于的时候,就容易手忙脚乱,丢三落四了
iversonfor2 2014-07-18
  • 打赏
  • 举报
回复
你觉得NULL放在前面觉得他压根不算个具体对象,所以想把他放到后面,我明白,就像oracle,你不可能select * from emp where null is name;
日知己所无 2014-07-18
  • 打赏
  • 举报
回复
Java的一些基础语法参考了C/C++语言,并且适当的做出了一些改善,目的是防止一些不必要的程序书写错误 对于C/C++语言来讲,由于if(对象=NULL)也是合法的语句,编译器一般不会提示错误。除非特意调整一些警告级别,或者使用lint等静态代码解析工具才有可能会得到一些提示,为此程序员的一时的粗心大意,漏写一个等号的问题让人非常头痛 所以,在C/C++世界里,书写if(NULL==对象)是非常常见以及合理的,因为如果漏写一个等号的话,if(NULL=对象)会给出编译错误;如果确实要在if语句里面做赋值操作的话,一般需要给出一些明确的注释予以说明 对于Java语言来讲,针对这点已经给出明确的改善 不仅if(null=对象)会提示错误 if(对象=null)也会提示错误 所以,Java程序员很幸福,怎么写都不会出问题 而你看到的把常量摆放在前面的写法,应该是有着良好C/C++书写习惯的程序员的产物 结论: 对于Java语言来讲,推荐使用if(对象==null)这种便于阅读的书写方式,读作“如果对象为空,则” 进一步讲: if(name!=null && name.equals("lucy"))完全等价于if("lucy".equals(name))都是正确的代码 而if(name.equals("lucy"))在name是null的情况下会抛异常,一般会认为是危险的代码 由于一些Java程序员会由于粗心或者不了解语言特性,忘记判断null,所以大多数项目组会明确要求equals必须按照常量放在前面的书写方式,以减少不必要的错误,并且代码更加简洁美观 程序员应该彻底理解自己书写的代码,知道自己到底想干什么 如果感兴趣,推荐阅读一下《代码大全》或者林锐写的《高质量C/C++编程指南》
黄泉颤抖 2014-07-18
  • 打赏
  • 举报
回复
没有区别。全凭个人爱好 一个对象判断时,我喜欢 if(object==null) 多个对象判断时,喜欢if(null ==object && obj==null)
网络科技 2014-07-18
  • 打赏
  • 举报
回复
引用 9 楼 dollyn 的回复:
没有区别,但我强烈谴责null放前面的写法,对于我等强迫症患者来说,这种写法简直反人类
握爪
姜小白- 2014-07-18
  • 打赏
  • 举报
回复
前后没有区别 if(null==对象) 这个是个习惯问题,有些人习惯将null写前面,这样看代码时能很容易看到此处是个非空判断
霜之哀伤 2014-07-18
  • 打赏
  • 举报
回复
没有区别,但我强烈谴责null放前面的写法,对于我等强迫症患者来说,这种写法简直反人类
oh_Maxy 2014-07-18
  • 打赏
  • 举报
回复
引用 5 楼 xzy88 的回复:
[quote=引用 2 楼 rumlee 的回复:] 不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
你说的这种情况,倒是可以理解,为了省几个字节的空间嘛,而判断为空的那种,倒着写,确实有点怪怪的。 但我习惯,也是用: if(name!=null && name.equals("lucy")) 但一般,得到name前,我都是用三目运算,判断为null时,转为""了,就不存在name.equals("lucy")出现空指针异常了[/quote] 你可以优化代码:if("lucy".equals(name)),减少判断。 常量放在前面是很多公司的编码规范,习惯了就好。
rumlee 2014-07-18
  • 打赏
  • 举报
回复
引用 3 楼 xzy88 的回复:
[quote=引用 1 楼 rumlee 的回复:] 没有区别 采用后面一种做法的人,一般都是c/c++程序员转过来做java的,在c/c++中的推荐写法是这样,防止==与=写错。
就算是这样,我感觉,似乎也没什么必要啊,如果if(user==null)写成if(user=null),还能通得过编译吗? C++我不熟,但java中,那样写法,直接报错啊,所以,不存在==写成=的情况,C++中,存在吗? [/quote] 在c/c++中,if(user=null) 是可以通过编译的。
yufengdxw 2014-07-18
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
如果没有对name做空判断,name.equals("lucy")和"lucy".equals(name)是不一样的 ==倒是没有什么区别
网络科技 2014-07-18
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
你说的这种情况,倒是可以理解,为了省几个字节的空间嘛,而判断为空的那种,倒着写,确实有点怪怪的。 但我习惯,也是用: if(name!=null && name.equals("lucy")) 但一般,得到name前,我都是用三目运算,判断为null时,转为""了,就不存在name.equals("lucy")出现空指针异常了
zxl359592450 2014-07-18
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。 例如有人就喜欢把 if(name!=null && name.equals("lucy")) 写成 if("lucy".equals(name)) 我看了也觉得挺蛋疼。
equals 反着写可以避免NullPointException
网络科技 2014-07-18
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
没有区别 采用后面一种做法的人,一般都是c/c++程序员转过来做java的,在c/c++中的推荐写法是这样,防止==与=写错。
就算是这样,我感觉,似乎也没什么必要啊,如果if(user==null)写成if(user=null),还能通得过编译吗? C++我不熟,但java中,那样写法,直接报错啊,所以,不存在==写成=的情况,C++中,存在吗?
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧