Java中null==obj vs obj==null

java不是c++,if (obj=null)是会编译出错的,两者没有多少区别。倒是CONSTANT.equals(obj)和obj.equals(CONSTANT)有区别,前者能防止空指针
■网友
谢邀。不明白什么叫「避免编译错误」。。。编译错误改就是啦,之所以会有这么个东西出来,是因为 C++ 写 if(obj = NULL) 是不会报编译错误的,所以这么个写法的初衷是为了避免逻辑错误,而非编译错误,让编译器替手残的程序员多检查一下下。但你现在都用 Java 了,obj = null 都会报错了,那何苦呢。。。另外可读性的问题,就各有所好咯,有的人就喜欢调转写你也没办法。。然而当年写 C++ 的时候我也没换过来写。。(毕竟我是处女座)最后,判 null 什么的,直接上 IDE 自动生成不就好咯,比如 Intellij Ctrl-J 再来个 ifn,完美!
■网友
谢邀。只是编程习惯问题。感觉Java中null == obj的写法意义不大。C/C++将NULL写在前是为了防止将if(obj == NULL)误写作if(obj = NULL)导致出错。NULL实际是一个标准宏定义#define NULL (void*)0它可看作代表0值的地址,数值上等于0,而条件判断时会进行隐式转换,0值被认为是False。故if(obj = NULL) 的写法不会报错,可能编译时无感知而实际运行逻辑不合预期,且难以发现。Java同C/C++不同,只有引用没有指针,也就不存在0值地址到布尔类型的转换规则。例:public class Hello { public static void main(String args) { Object obj = null; if(obj = null) { System.out.println("Hello World!"); } }}编译报错:Hello.java:4: 错误: 不兼容的类型: Object无法转换为boolean if(obj = null) { ^1 个错误可见,obj这个空引用是无法转换为布尔型的。Java语法规范已经保证了这种写法在编译阶段就会报错。写作null == obj也就意义不大了,反而稍不合阅读习惯。因而Java工程代码中null == obj的写法较少。
■网友
Java中null==obj vs obj==null

【Java中null==obj vs obj==null 】 Java中null==obj vs obj==null

better ,which one is ?
■网友
谢邀编码习惯而已,好比有的人习惯用左手,有的人喜欢用右手==这种一般都是写在if判断里面,你让你同事写个if(obj = null)给你看看?不过你同事算好的,很多人把 ‘==’ 和‘equals’混一起说null写前面可以避免空指针,空你妹没调用任何方法,作个比较也会空指针?╭∩╮(︶︿︶)╭∩╮
■网友
null写前面一点都不直观。

■网友
作用是相同的,区别是是不是好的习惯,我个人一律用null==obj


    推荐阅读