Java中的"=="的作用是用來判斷兩個數據是否相等,無論是8種原生數據類型還是引用類型,引用類型相等也就是指兩個引用指向同一個對象,Object類中的equals()方法僅僅是反回(this == Object),所以Object的equals()方法僅僅是判斷對象是不是同一個對象,而對於那些繼承了Object類而又重寫了equals()方法的類,比如說String類,那就要依據具體的equals()方法的實現來判斷了.
String類特性與創建過程
1 String是常量,其對象一旦創建完畢就無法改變,當使用“+”拼接字符串時,會生成新的String對象,而不是向原有的String對象追加內容,對於java的String來說比軟特殊,java中有一個String pool的概念,它是由String這個類單獨在棧中維護。
2 采用literal(字面值)方式賦值時(如 Strng str = "strings"),java會查找String Pool(字符串池,由String這個類單獨維護)中是否存在"String",如果不存在,則在String Pool中創建一個"strings"對象,然後將String Pool中的這個"strings"對象地址返回來,賦給引用變量str,這樣str會指向String Pool中的這個"strings"字符串對象。
3 如果存在,則不創建任對象,直接將String Pool中這個"strings"對象地址返回來,賦給引用。
4 采用 String str = new String("strings")這個方式,首先在String Pool中查找有沒有"strings"這個字符串對象,如果有,則不在String Pool中再去創建"strings"這個對象了,直接在heap(堆)中創建一個"strings"字符串對象,然後將堆中這個"strings"對象地址返回來,賦給str引用,導致str指向了堆中創建的這個"strings"字符串對象。
5 如果沒有,則首先在String Pool中創建一個"strings"對象,然後再在heap中創建一個"strings"對象,然後將椎中這個"strings"對象的地址返回來,賦給str引用,導致str指向了堆中所創建的這個"strings"對象。參見java.lang.String.intern()方法。
了解了這些就來猜猜下面的例子吧