Java中null和“”(空字符串)的区别
null指的是⼀个空对象,这个对象可以是任何⼀个类的实例。
""指的是⼀个空字符串,这个字符串的长度为0。
也就是说null这个对象的类型可以是任何⼀个类型,⽽""这个对象的类型只能是String。
问题: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
//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)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论