日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中_null和“”的区别详解

發布時間:2025/3/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中_null和“”的区别详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

null""的區別

問題一:

null""的區別

String s=null;

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

String s="";??

string.trim()就不會拋,為什么?

答:

NULL代表聲明了一個空對象,根本就不是一個字符串。??

""代表聲明了一個對象實例,這個對象實例的值是一個長度為0的空字符串。

?

NULL代表聲明了一個空對象,對空對象做任何操作都不行的,除了===??

""是一個字符串了,只是這個字符串里面沒有內容了

?

String s=null;只是定義了一個句柄,也就是說你有了個引用,但是這個引用未指鄉任何內存空間??

String s="";這個引用已經指向了一塊是空字符串的內存空間,是一個實際的東東了,所以你可以對它操作,而不用擔心什么了

?

你說數字0和沒有是不是一種概念啊??道理一樣的

?

而且,null可以賦值給任何對象.""就不行了.

?

這里""NULL絕對是兩個概念??

""代表一個字符串存在,它的值就是“”??

NULL代表字符串根本沒有實際的值,你并不知道它是什么。。。

?

,我明白了,意思就是String?? string?? =?? null?? String?? string;是一回事兒

?

null是空對象???? ""是空字符串

String s=null;//null是未分配堆內存空間??

String?? a;//分配了一個內存空間,沒存入任何對象??

String?? a="";//分配了一個內存空間,存了一個字符串對象

?

?

?

問題二:

String s;String s=null;String s="a";有什么區別???

針對這三種情況,使用out.println(s);的時候,第一個會出現異常,第二個會輸出null.第三個則會輸出a.??

這是為什么呢?這三句聲明語句,各自作了什么呢?

?

答:

第一個只是定義了一個String類型變量s,并沒有給它賦初值,在Java中,默認在使用一個變量的時候必須賦予它初值(降低風險)。

第二個和第三個都定義了String類型變量s,并賦予它初值,只不過第二個賦予的值為null(空)罷了

?

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

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

第二個為空引用;

第三個是在字符串池里寫入一個字符'a',然后用s指向它。

另外,??

String s="a"String s=new String("a");是有本質上的區別的??

前者是在字符串池里寫入一個字符'a',然后用s指向它;

后者是在堆上創建一個內容為"a"的字符串對象。

String?? str="aaa";??????????????????? //于棧上分配內存

String?? str=new?? String("aaa"); ?????//于堆上分配內存

?

String s; 系統會自動賦值null

?

String s;只是給s分配一個內存空間??

String s=null;是分配的空間中存儲的值為空值??

String s="a";這句就不用我多說了分配的空間的值為字符a

?

?

?

問題三:

聲明了一個string a;變量???

在以后的判斷中,a==""a==null有何不同???

?

答:

如果沒有給a賦過值,a==""會導致異常。????

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

此時建議用如下語法:??

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

{??

}??

如果anull,就不會執行后面的判斷,直接返回true??

?

null是用來判斷引用類型是否分配了存儲空間??

""是針對字符串的;??

string類型實際上是字符串指針,也即是一個引用類型??

所以如果沒有給a賦過值,a==""會導致異常??

所以if(a==null?? ||?? a==""){}這種寫法也是正確的

?

?

問題四:

String abc=null;String abc="";String abc;三種寫法有什么區別?

?

答:

1:創建一個空字符串對象,??

2:創建一個字符串為空的字符串對象。??

3:聲明一個字符串對象,但并沒有分配內存,而12已經分配了內存??

對于最后一種表示,你不能if(abc==null),或者int?? length?? =?? abc.length();編譯的時候會提示可能沒有初始化.

?

?

String?? abc=null;??

String?? abc="";??

一般推薦使用第二種??

第一種abc指向null,很多時候要判斷字符串是否為空時,容易漏掉這種情況,在調用String的相關方法的時候就會出錯??

第二種則相對簡單,String的方法都可以用,判斷的時候也不會出錯

?

1) String?? abc=null;??

2) String?? abc;???

3String?? a="";??

4) String?? b="";??

5) String?? c=new String("");??

6) String?? d=new String("");

//1)等于2),和C語言不同,JAVA為安全原因不允許一個懸掛引用,沒有賦值的引用地址一律自動賦值為NULL,以防止訪問到任意內存??

//3)4),變量ab將會指向同一內存地址(""的地址)??

//5)6)中,變量cd不會指向同一地址,而是兩個""內容的地址,并且和a,b不同,實際上,3)4)相當于new String("").intern().??

//String類維護著一個字符串池,對于像3)4)這樣的賦值方法,String會在這個池中查找字符串是否已經在池中,如果在,就直接指向該地址,

?

如果不在,生成一個實例放入池中再指向那個地址,可見對于同樣內容的字符串多次引用時3)4)的方法要比5)6)的方法剩內存,之所以這樣做,

?

因為String是一個內容不可變的量,運用的是設計模式GOF.FlyWeight??

?

?

?

?

但有個關鍵的一點,沒有人說到,這就是:??

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

考慮下面的代碼:??

//StringTest.java??

public?? class?? StringTest?? {?????

??? static?? String?? s;???? //*??

??? public?? static?? void?? main(String[]?? args)?? {??

??????? //String?? s;???????? //**??

??????? System.out.println(s);??

??? }??

}????

編譯并運行上面的代碼,將打印null

可見標有*號的行是自動初始化了的(s被自動初始化為null)。??

而如果把標有**號的行取消注釋,代碼將不能通過編譯,這是因為這行定義的是本地變量,而本地變量是不會自動初始化的。

由此得出結論:

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

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

這些雖然是小知識點,但在實際應用中很重要,也很容易被一些人忽視,特此提出。

還有一點要說明的是:

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


參考百度文庫:http://wenku.baidu.com/view/73447d4efe4733687e21aa58.html

?

?

總結

以上是生活随笔為你收集整理的java中_null和“”的区别详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。