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;

  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("'");
            
        }

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

 

 

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穆埙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值