深入理解java空字符串与null的区别

在最近的后台开发中,遇到一个比较奇怪的需求。要求存储名称为“null”到数据库中,并用于查询和显示,所以根据个人的一些基础理解写了以下分析,不喜勿喷,共同学习。


一、“”和NULL分别是什么

    Java中,null是一个关键字,是不确定的对象。但null本身并不是一个对象,也不是Object的实例;

    String a = null;表示声明一个字符串对象的引用,它本身不占用任何地址空间;

    而“”是一个空的字符串,在定义String a = “”;的时候已经给a分配了一块地址空间,就像C++中的指针;

二、验证观点

针对以上三点我们用一个Demo来进行描述:

public class StringTest {

    /**
     * @param args
     * @author Hans
     */
    public static void main(String[] args) {       
        String a = new String() ;
        String b = null ;
        String c = "" ;
        System.out.print("a == b:");
        System.out.println(a == b);                      //内存地址的比较,返回false
        System.out.println("a.equals(b):" + a.equals(b));
        System.out.print("b == c:");
        System.out.println(b == c);                      //内存地址的比较,返回false
        System.out.println("c.equals(b):" + c.equals(b));  
        System.out.print("a == c:");
        System.out.println(a == c);                      //内存地址的比较,返回false
        System.out.println("a.equals(c):" + a.equals(c));//值的比较,返回true
    }

}

    输出结果:
    a == b:false
    a.equals(b):false
    b == c:false
    c.equals(b):false
    a == c:false
    a.equals(c):true

    输出结果验证以上三点!

三、null和“”的使用场景    

    如果此变量在程序中后续是一个必须使用的变量,则定义为空字符串,即“”;

    如果此变量不确定是否后续必须使用,则定义为null,让它不指定任何内存空间,如果这个对象就不再被任何对象应用,JVM垃圾回收机制会自动对其进行回收。


四、“”判断的常见错误写法

    1,错误用法一:

    if (a == "") {
     }

    2,错误用法二:
     if (a.equals("")) {
     }

    以上两点直接对空字符串进行判断,缺少了a == null的判断,编译的时候不会出现异常,但是当a为空对象的时候会导致程序出现空指针异常导致程序挂起,所以在编程的过程中判断空字符串的时候一般要先判断对象是否为空

    if(a ! == null){

    //判断空字符串及其他业务逻辑

    }


    或者比较好的写法

    if (a! = null && !a.equals("")) {
     //do something
     }

五、总结和建议

    所以在编程过程中,特别是保存数据如果终端允许输入null或者其他关键字的情况下,后台在保存数据到数据库的过程中建议统一处理为“”或其他协议约定好的内容,此时在数据库中的该字段内容为不会出现null关键字,以免引起混淆,针对此类数据在给app返回的时候也统一协议为返回“”,让不同终端系统根据自己的具体需求进行各自处理,作为后台系统需要考虑程序的可扩展性,所以不要为了满足一些比较特殊的需求而针对化的做处理,只会让程序越来越臃肿难以维护。
 
   
  
 
   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值