本文为转载文章,源地址->http://www.cnblogs.com/qiuting/p/5373571.html
1. 类型
null是一个对象的值,而不是一个字符创。
“”是一个长度为0的字符串。
2. 内存
String s = null
在该定义中定义了一个String的对象,但对该对象没有具体实现,即只创建了在栈中的引用,而不创建对应的实例,因此在堆中不占用内存。
String s = ""
是定义了一个String对象,并赋值为长度为0的字符串,该字符串在堆中占有内存空间。
示例程序:
public class Demo{
public static void main(String[] args){
String str1 = "";
String str2 = new String();
String str3 = null;
System.out.println(str1 == str2); //比较str1和str2的内存地址,返回false
System.out.println(str1.equals(str2)); //比较str1和str2的内容,返回true
System.out.println(str1.equals(str3)); //比较str1和str3的内容,返回false
System.out.println(str3.equals(str1)); //会引发空指针错误java.lang.NullPointerException
}
}
3. 比较字符串为空的几个方法
if(s == null || s.equals) // 这种比较方法要调用equals方法相对而言效率比较低
if(s == null || s.length ==0) //这种比较方法相对于上一种比较方法效率有所提升
if(s == null || s.isEmpty()) //这种方法在SE6.0出来后才开始使用
if(s == null || s == "") //这种方法最为简洁,效率也比较快
PS:
s == null
这个语句不可或缺,且必须在比较的第一位,否则将引发空指针错误(java.lang.NullPointerException)