null == a or a == null 及java String 非空判断

今天在论坛上看到一个帖子,讨论的是null == 和 == null的区别,比较多的人都说是没有区别的。其中有一个人说因为写了 == null而被头说了,下面便一堆人说这个头不懂技术。今天,我就这个问题说下自己的看法。

首先,把这个问题一般化,即将变量与常量做比较时,常量写在等式左边好还是右边好?

常量== 变量是一样良好的编程习惯,可以避免出错一些不必要bug((在少写了个=的进时候)。当然这一点在java里已经没有那么明显了,但还是可以证明的,请看以下代码:

在变量 == 常量情况下:

 
  1. boolean istrue = false;

  2. //如果istrue为false则输出失败

  3. if(istrue == false){

  4. System.out.println("失败");

  5. }

以上代码没有出现语法和逻辑问题,再看以下代码(一不小心写少了个=):

 
  1. boolean istrue = false;

    扫描二维码关注公众号,回复: 4251310 查看本文章
  2. //如果istrue为false则输出失败

  3. if(istrue = false){

  4. System.out.println("失败");

  5. }

这时候问题就比较严重了,这段代码没有语法错误,没有编译和运行时的错误,但它的逻辑却出了错!!!

我们再来看常量 == 变量的情况:

 
  1. boolean istrue = false;

  2. //如果istrue为false则输出失败

  3. if(false == istrue){

  4. System.out.println("失败");

  5. }

首先这样也是不会出现问题的,再来看下面(一不小心写少了个=):

很明显出错了语法错误了!!!

当然以上的例子在java没有意义,因为更多的时候我们在if中的boolean类型不会使用==,而且java中的if语句只能使用类型,所以说以上的问题在java中基本不会出现,但是,在其他的语言中会出错,比如C,下面我们就看下C出现的问题。

我们知道,在C中,if语句中的值,0这假,非0为真,也就是说if语句中可以是非bool类型的数值,以下C代码没有语法错误,逻辑上却是错了。

 
  1. int vis = 0;

  2. //如果vis等于0输出

  3. if(vis = 0){

  4. printf("成功");

  5. }

综上所述,使用常量 == 变量的原因与java中语法糖-泛型一样,可以将错误提前到编译时出现(在小写个=的情况下),不管如何,这也是一种良好的编程习惯。

对于这种情况在java上更多的表现为null == string与string == null,在企业中,基本上所有的代码只有null == string这种判断,与此相关的,是String的equals方法,怎样判断一个string 是不是""呢?严谨的做法是"".equals(str)而不是str.equals(""),在我学生时期我时常是使用后者,使用前者的原因是在str为null的情况下,后者会抛空指针异常。同理,我们在使用String的isEmpty方法时要注意,一定要进行非空判断,以下是isEmpty方法的源码:

可以看出,isEmpty只是通过比较str的长度,甚至没有进行.trim()的处理,使用要相当小心,所以,如果你要自己封装工具进行判断,可以使用以下方法:

这里使用str.trim()的原因是若null == str则str.trim()不会执行,也就是说str.trim()不会出现String的空指针。

=============================================================

if(null ==m4 || "".equals(m4.trim()) || "null".equalsIgnoreCase(m4)){
            sb.append(",'").append(rs_user_id).append("'");
            System.out.println("m4为null进入if判断");
        }else{
            sb.append(",'").append(m4).append("'");
            
        }

==========================================================

好了,以上就是今天分享的全内容,由于是个人经验总结,难免会出错,欢迎大家批评指正,万般感谢。

猜你喜欢

转载自blog.csdn.net/qq_32265203/article/details/81474782