我們知道當列印物件的引用時,會預設呼叫object類的tostring()方法,返回的是乙個字串表示,該字串的形式為類名+@+十六進製制的雜湊值;為什麼string列印的不是這樣乙個位址值呢?因為string類繼承自object類,重寫了從object類拿到的tostring()方法,返回的是該該物件本身,即字串。詳見下面api中object的tostring()方法和string類的tostring()方法:
api中object類的tostring()方法:
public string tostring()返回該物件的字串表示。通常,
tostring
方法會返回乙個「以文字方式表示」此物件的字串。結果應是乙個簡明但易於讀懂的資訊表示式。建議所有子類都重寫此方法。
object
類的tostring
方法返回乙個字串,該字串由類名(物件是該類的乙個例項)、at 標記符「@
」和此物件雜湊碼的無符號十六進製制表示組成。換句話說,該方法返回乙個字串,它的值等於:
getclass().getname() + '@' + integer.tohexstring(hashcode())
返回:該物件的字串表示形式。
api中string類的tostring()方法:
public string tostring()返回此物件本身(它已經是乙個字串!)。
指定者:
介面charsequence
中的tostring
覆蓋:類object
中的tostring
返回:
字串本身。
擴充套件:string類的equals()方法:
object類的equals()方法,預設是比較物件的位址值,一般使用時會重寫該方法,用來比較物件的屬性值。
string類繼承object類的equals()方法,並重寫了該方法,比較的是字串的內容。詳見api:
public boolean equals(object anobject)將此字串與指定的物件比較。當且僅當該引數不為
null
,並且是與此物件表示相同字串行的string
物件時,結果才為true
。
覆蓋:類object
中的equals
引數:
anobject
- 與此string
進行比較的物件。
返回:如果給定物件表示的string
與此string
相等,則返回true
;否則返回false
。
另請參見:
compareto(string)
,equalsignorecase(string)
String為什麼是final
1.可以快取 hash 值 因為 string 的 hash 值經常被使用,例如 string 用做 hashmap 的 key。不可變的特性可以使得 hash 值也不可變,因此只需要進行一次計算。2.string pool 的需要 如果乙個 string 物件已經被建立過了,那麼就會從 strin...
為什麼watch機制不是銀彈?
幾乎所有構建系統都選擇使用watch機制來解決開發過程中需要反覆生成構建後檔案的問題,但在watch機制下,長期以來我們必須忍受修改完 儲存完 必須喝口茶才能重新整理看看效果的問題。在這裡我們嘗試 為什麼watch不是銀彈,並嘗試尋找一種更好的方案來解決這個問題。watch基於的事實當乙個檔案修改,...
String為什麼是Final的?
1 final的用途 string是被final修飾的類,其屬性value 是被final修飾的。所以string是不可被繼承的,value被儲存的資料不可更改性 引用位址不可更改,陣列本身可變 但是value是private修飾的,而且string是不可被繼承的,所以保證了字串不可變性 那麼為什麼...