Java空字符串与null的区别

本文详细解析了Java中空字符串()与null的区别,通过实例对比两者在比较运算符==及方法equals()中的行为差异,并进一步讨论了数据库查询结果为空时的判空逻辑。

问题:java中空字符串和null的区别,如下题

        String str1 = "";
        String str2 = null;
        String str3 = new String();
        String str11 = "";
        String str22 = null;
        String str33 = new String();
        System.out.println(str1 == str2);       //false
        System.out.println(str1 == str3);       //false
        System.out.println(str1 == str11);      //true
        System.out.println(str1.equals(str2));  //false
        System.out.println(str1.equals(str3));  //true
        System.out.println(str1.equals(str11)); //true
        System.out.println(str2 == str3);       //false
        System.out.println(str2 == str22);      //true
        System.out.println(str2.equals(str22)); //报错,str2为空,空指针异常
        System.out.println(str2.equals(str3));  //str2在前报错,改成如下格式
        System.out.println(str3.equals(str2));  //false
        System.out.println(str3 == str33);      //false
        System.out.println(str3.equals(str33)); //true

延伸问题:数据库如下图数据的一张存储用户信息的user表格,当从数据库中取出age=16的人的姓名name
数据库如图数据的一张user表格

                //com.seven.www.findByAge = "SELECT name FROM user_info WHERE age = 16"
                String userName = session.selectOne("com.seven.www.findByAge");
                System.out.println(userName == "");         //false
                System.out.println(userName == null);       //false
                System.out.println(userName.equals(""));    //true
                System.out.println(userName.equals(null));  //false

如果查询的是age=17的呢,结果如何呢?

                //com.seven.www.findByAge = "SELECT name FROM user_info WHERE age = 17"
                String userName = session.selectOne("com.seven.www.findByAge");
                System.out.println(userName == "");          //false
                System.out.println(userName == null);        //true
                System.out.println(userName.equals(""));     //报错,空指针
                System.out.println(userName.equals(null));

由以上延伸另一个写代码的好习惯,string类型判断变量是否与某个字符串相等时或者判断是否为空时,将变量放在equals里面,如:”“.equals(userName)。
判空的最好方法为:

if(userName == null || userName == "")

讲解下Java空字符串与null比较的原理:

1、类型
null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a = null ;
“”表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String str = “” ;

2、内存分配
String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间;
String str = “”; 表示声明一个字符串类型的引用,其值为”“空字符串,这个str引用指向的是空字符串的内存空间;

在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap):

就如下:

String str = new String(“abc”) ;

ps:=左边的是存放在栈中(stack),=右边是存放在堆中(heap)。

== 比较的是地址,方法 .equals()比较的是值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值