天天看點

java中NULL與""的差別

(1)問題一:

null和""的差別

String s=null;

string.trim()就會抛出為空的exception

String s="";

string.trim()就不會抛,

為什麼?

答:

NULL:代表聲明了一個空對象,不是一個字元串,可以賦給任何對象。  

""     :代表聲明了一個對象執行個體,這個對象執行個體的值是一個長度為0的空字元串。

String s=null;  隻是定義了一個句柄,即你有了個引用,但是這個引用未指向任何記憶體空間

String s="";    這個引用已經指向了一塊是空字元串的記憶體空間,是一個實際的東東了,是以你可以對它操作。

(2)問題二:

String s1;             //配置設定了一個記憶體空間,沒存入任何對象 

String s2=null;   //null是未配置設定堆記憶體空間

String s3="a";   //配置設定了一個記憶體空間,存了一個字元串對象

out.println(s1);  //   出現異常

out.println(s2);  //    輸出null

out.println(s3);  //    輸出“a”

答:

主要要了解的是String s; s為一個引用~~它不是對象

第一個是沒有初始化的引用;

第二個為空引用;

第三個是在字元串池裡寫入一個字元'a',然後用s指向它。

另外,

String s="a"和String s=new String("a");是有本質上的差別的 :

(1)

前者是在字元串池裡寫入一個字元'a',然後用s指向它;

後者是在堆上建立一個内容為"a"的字元串對象。

(2)

String str="aaa"; //于棧上配置設定記憶體

String str=new String("aaa"); //于堆上配置設定記憶體

(3)問題三:

String a;

if(a=="")  //編譯階段即異常  

String a = null;

if(a==null)  //傳回true

答:

在實際處理時,往往認為""和null代表相同的含義,即都代表無值。

此時建議用如下文法:

if(a==null || a=="")

{

}

如果a為null,就不會執行後面的判斷,直接傳回true。

null:是用來判斷引用類型是否配置設定了存儲空間

""  :是針對字元串的;

(4)問題四:

String s;在什麼情況下可以等同于String s=null;而在什麼情況下又不等同?

考慮下面的代碼:

java中NULL與""的差別
1 //StringTest.java 
2 public class StringTest { 
3     
4     static String s; 
5     
6     public static void main(String[] args) { 
7         System.out.println(s);   //輸出null
8 } 
9 }          
java中NULL與""的差別

編譯并運作上面的代碼,将列印null。

s是自動初始化了的(s被自動初始化為null)。

由此得出結論:

在成員變量的定義中,String s;等同于String s=null;

而在本地變量(方法變量)的定義中,String s;不等同于String s=null;,這時要使用s必須顯式地指派。

還有一點要說明的是:

隻要是在方法在中定義變量都要顯示賦初值,main()方法也不例外,而在方法之外編譯器會自動賦初值。