空字符串
-
類型: "" 是一個(gè)空字符串,長(zhǎng)度為0,在內(nèi)存中分配一個(gè)空間,可以使用 Object 對(duì)象中的方法。例如
"".toString()等 -
內(nèi)存分配:
Stirng str = "":表明聲明一個(gè)字符串類型的引用,其值""為空字符串,這個(gè) str 引用指向的是空字符串 "" 的內(nèi)存空間
null
-
類型:null 表明一個(gè)對(duì)象的值,不是一個(gè)字符串,并沒有分配內(nèi)存,比如
String str = null -
內(nèi)存分配:
String str = null:表明聲明一個(gè)字符串對(duì)象的引用,但其指向一個(gè)null,也就是說沒有指向任何內(nèi)存空間
String str1 = "" // str對(duì)應(yīng)一個(gè)空串,聲明對(duì)象的引用
String str2 = null // str2引用為空
String str3 = new String() //str3指向具體的String實(shí)例, 默認(rèn)為""
**注意**:str1和str3都被實(shí)例化,都指向了內(nèi)存中的空間,雖然str1和str2指向的地址不一樣,但是值是一樣的,都是"",而str2沒有被實(shí)例化
比較
由于 null 不是對(duì)象,"" 是對(duì)象,所以比較的方式是
str1.equals("") //對(duì)象用equals方法來比較
str2 == null //null用==來比較
總結(jié)
- Java中有兩種比較大小的方式:
==和equals方法,前者是根據(jù)地址來比較,只有地址和值都相等,則兩者才相等;后者則是根據(jù)變量的值比較大小,只要值相等,兩者便相等。 - 在Java中變量和變量引用都是存在棧 (stack) 中,而對(duì)象 (new出來的)都是存放在堆 (heap) 中的,例如:
String a = new Stirng("ABC") //a存放在棧中,而ABC這個(gè)值存放在堆中,a指向ABC在堆中的地址