本文爲轉載文章,源地址->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)