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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章