2013-11-01 53 views
1

我不明白Java中空字符串與空字符串之間的區別。Java字符串:null與空的區別

假設String a = null,我想通過使用a.isEmpty()a.equals("null")來查看a是否爲空。這些都不起作用。我必須使用a == null來判斷是否是null

從我的理解來看,如果在兩個字符串之間使用==,實際上是在比較它們在內存中的地址或引用?這種理解是正確的嗎?我希望有人能澄清我的困惑。提前致謝。

+0

value == null測試對象引用以查看它是否爲null。如果它爲空,則不能像equals或isEmpty那樣訪問對象屬性,因爲參考指向無。最好的選擇是首先檢查null以避免產生NullPointerException的可能性 – MadProgrammer

+0

看到重複,但isEmpty與長度爲0的字符串相同,null表示根本沒有字符串 –

+1

關閉主題,但爲什麼人們回答對這個問題,因爲它已被問及,正確的答案,並正確地確定爲重複? – njzk2

回答

4

空==>沒有引用(沒有字符串引用)

「」 ==>有一個指向字符串的引用(這恰好是空的)

0

你是正確的:==測試兩個字符串是否實際上是對同一個String對象的引用。

一個空的String對象正是它在錫上所說的,而null指的是沒有任何對象引用。使用空字符串,您可以調用所有String方法,並且一般將其與其他String一樣對待 - 但使用null時,沒有對象調用方法,因此您得到NullPointerException

+0

NullPointerException正是我在運行代碼時所得到的結果。這個異常沒有消失,直到我檢查== null。感謝所有的答覆!將檢查重複的線程。 – TonyGW

1

總是使用==當檢查任何null參考。您不能使用Object#equals(),因爲如果您沒有實例,則無法調用實例方法,並且null具體表示「沒有實例!」

+1

值得注意的是,你可以傳遞一個空引用equals(),因爲通過約定它應該能夠處理null(評估它爲false)。 – Surveon

0

此:

a.equals("null") 

字符串 「空」 的〜應變比較。

null是Java中的保留關鍵字,表示該變量不引用任何內容。

a.isEmpty() 

檢查字符串是否沒有字符。即它等於""

0

空字符串的字面意思就是「」,而null是對無的引用。因此,任何null的東西都沒有被實例化,但是存在的東西是存在的,但不包含任何值。

在Java中記住的事情是String是一個對象,而不是像int或double這樣的原始數據類型。 「==」只比較不是對象引用的值之間的等價關係,因此對於需要使用.equals的字符串和其他對象。

0

String是內存中的String對象的引用變量。如果String爲空,則表示它不引用任何String對象。

a.equals("null");您正在比較內存中的字符串對象的值與字面值「null」。要檢查一個String變量是否爲空(表示不引用內存中的String對象),請使用a == null

相關問題