為什麼列印String物件,不是位址值?

2021-08-03 22:04:47 字數 1626 閱讀 3597

我們知道當列印物件的引用時,會預設呼叫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是不可被繼承的,所以保證了字串不可變性 那麼為什麼...