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;而在什么情況下又不等同?
考慮下面的代碼:

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 }    

編譯並運行上面的代碼,將打印null。
s是自動初始化了的(s被自動初始化為null)。
由此得出結論:
在成員變量的定義中,String s;等同於String s=null;
而在本地變量(方法變量)的定義中,String s;不等同於String s=null;,這時要使用s必須顯式地賦值。
還有一點要說明的是:
只要是在方法在中定義變量都要顯示賦初值,main()方法也不例外,而在方法之外編譯器會自動賦初值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM