爲什麼打印String對象,不是地址值?

       我們知道當打印對象的引用時,會默認調用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()方法:

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)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章