2013-05-18 236 views
27

空字符串(String s = null)和空字符串(String s = "")之間的區別是什麼?空字符串和空字符串之間的區別

這是我有:

String s1 = ""; //print statement does not print any thing for s1 but s1.length()=0 
String s2 = null;//print statement prints "null" for s2 but s2.length() gives exception 

是什麼意思?

+5

這已被問及(以及很好的回答)之前:http://stackoverflow.com/questions/4802015/difference-between-null-and-java-string – Eric

+0

@Eric是的這是類似的問題,但我的意圖是要知道爲什麼爲s1.length()返回零和s2.length()給出例外..但無論如何,謝謝我有更多的細節信息關於你在這個頁面鏈接你.. –

回答

46

String s1 = "";表示將空的String分配給s1。 在這種情況下,s1.length()"".length()相同,如預期那樣將產生0

String s2 = null;意味着(null)或「根本沒有值」被分配給s2。因此,這個s2.length()null.length()相同,因爲您不能在Java中調用null變量(指針,排序)上的方法,所以它將產生NullPointerException

此外,點,聲明

String s1; 

其實具有相同的效果:

String s1 = null; 

String s1 = ""; 

,正如所說,不同的事情。

1

當對象變量是在Java等語言的最初使用,他們絕對沒有價值可言 - 不是零,但硬是沒有價值 - 這是null

例如:String s;

如果你是要使用s,它實際上將具有值null,因爲它絕對不包含任何內容。

然而,一個空字符串是一個值 - 它是一個沒有字符的字符串。

String s; //Inits to null 
String a =""; //A blank string 

Null基本上是「無」 - 這是默認的「價值」(用鬆散的術語)是Java的分配給沒有初始化的任何對象變量。

Null不是一個真正的價值 - 因此,沒有屬性。因此,調用任何旨在返回值的內容(如.length())都將不可避免地返回錯誤,因爲「Nothing」不能具有屬性。

要進入更深層次,創建s1 = "";您正在初始化一個對象,該對象可以具有屬性,並佔用內存中的相關空間。通過使用s2;,您將指定該變量名稱爲一個字符串,但實際上並未在該位置指定任何值。

+2

這個解釋是真的打破。值類型不能爲空。 – carlosdc

+0

@carlosdc你能詳細說明一下嗎?你的意思是什麼值類型不能爲空? – Singular1ty

+0

try int i = null;在Java中。 – carlosdc

1

在分配NULL值的對象上不能調用任何方法。它會給出一個nullPointerException。因此,s2.length()會發出異常。

7

Null意味着什麼。它只是一個文字。 Null是參考變量的值。但是空字符串是空白的。它給出了length=0。空字符串是空白值,表示字符串沒有任何東西。

相關問題