null和""的区别

本文为转载文章,源地址->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)

发布了34 篇原创文章 · 获赞 3 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章