当前位置: 代码迷 >> J2SE >> 这个代码user==null与null==user有差异吗
  详细解决方案

这个代码user==null与null==user有差异吗

热度:68   发布时间:2016-04-23 20:31:21.0
这个代码user==null与null==user有区别吗?
过去也看了不少别人的写的代码,一般判断一个对象是否为空,大部分人,还是用
if(对象==null),但也看到一些人爱用if(null==对象),虽然,这两者效果是一样的,但后者,我看了还是有点莫名的蛋疼啊,都忍不住把它调个位置啊,不知道各位有没这种感觉?


------解决方案--------------------
没有区别

采用后面一种做法的人,一般都是c/c++程序员转过来做java的,在c/c++中的推荐写法是这样,防止==与=写错。
------解决方案--------------------
引用:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。

例如有人就喜欢把
if(name!=null && name.equals("lucy"))
写成
if("lucy".equals(name))

我看了也觉得挺蛋疼。

如果没有对name做空判断,name.equals("lucy")和"lucy".equals(name)是不一样的

==倒是没有什么区别
------解决方案--------------------
引用:
Quote: 引用:

不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。

例如有人就喜欢把
if(name!=null && name.equals("lucy"))
写成
if("lucy".equals(name))

我看了也觉得挺蛋疼。

你说的这种情况,倒是可以理解,为了省几个字节的空间嘛,而判断为空的那种,倒着写,确实有点怪怪的。
但我习惯,也是用:
if(name!=null && name.equals("lucy"))
但一般,得到name前,我都是用三目运算,判断为null时,转为""了,就不存在name.equals("lucy")出现空指针异常

你可以优化代码:if("lucy".equals(name)),减少判断。
常量放在前面是很多公司的编码规范,习惯了就好。
------解决方案--------------------
没有区别,但我强烈谴责null放前面的写法,对于我等强迫症患者来说,这种写法简直反人类
------解决方案--------------------
前后没有区别
if(null==对象)  这个是个习惯问题,有些人习惯将null写前面,这样看代码时能很容易看到此处是个非空判断

------解决方案--------------------
没有区别。全凭个人爱好
一个对象判断时,我喜欢  if(object==null)
多个对象判断时,喜欢if(null ==object && obj==null)
------解决方案--------------------
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++编程指南》
------解决方案--------------------
你觉得NULL放在前面觉得他压根不算个具体对象,所以想把他放到后面,我明白,就像oracle,你不可能select  * from emp where   null  is  name;
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。

例如有人就喜欢把
if(name!=null && name.equals("lucy"))
写成
if("lucy".equals(name))

我看了也觉得挺蛋疼。

你说的这种情况,倒是可以理解,为了省几个字节的空间嘛,而判断为空的那种,倒着写,确实有点怪怪的。
但我习惯,也是用:
if(name!=null && name.equals("lucy"))
但一般,得到name前,我都是用三目运算,判断为null时,转为""了,就不存在name.equals("lucy")出现空指针异常了

你可以优化代码:if("lucy".equals(name)),减少判断。
常量放在前面是很多公司的编码规范,习惯了就好。


+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))这个条件的全部等于,改成只要一个等于,或者全部不等于的时候,就容易手忙脚乱,丢三落四了
------解决方案--------------------
在java里没区别。。
防止以前c++里面if(变量=null)不报错。
------解决方案--------------------
纠结这个干嘛  干点正事不好嘛
------解决方案--------------------
引用:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。

例如有人就喜欢把
if(name!=null && name.equals("lucy"))
写成
if("lucy".equals(name))

我看了也觉得挺蛋疼。

你不觉得反过来写代码更简洁吗
------解决方案--------------------
引用:
不仅在==这种情况下,有人这样反着写,对于equals也有人喜欢反着写。

例如有人就喜欢把
if(name!=null && name.equals("lucy"))
写成
if("lucy".equals(name))

我看了也觉得挺蛋疼。

后面那个是有区别的,使用"xxxxx".equals();这样不会出现nullpointException
  相关解决方案