Java 基礎內容
toString方法我們處處都用到,是一個很重點的小知識,這裡大概講一下:
我們查閱 API文檔,查看java.lang.Object類的toString方法的詳細描述是這樣的:
toString
public String toString()
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns:
a string representation of the object.
我們大概翻譯一下:
返回一個能夠代表這個對象的字符串。一般而言,toString方法返回這個 對象的“文本表達式”。這個返回的結果很簡潔但是不是易於人們閱讀的信息表達式。這裡推薦大家在使用的 子類的時候重寫該方法。
對於Object這個類而言,toString方法返回值是由所屬類的類名、一個“@” 符號和這個對象哈希碼的無符號十六進制表達式組成的。換句話說,這個方法返回的字符串等同於下面的方法 返回的值:
getClass().getName()+ '@' + Integer.toHexString(hashCode ())
返回:
這個對象的字符串表達式
我們再看看java.lang.String類中的 toString方法,看看是否一樣呢
toString
public String toString()
This object (which is already a string!) is itself returned.
Specified by:
toString in interface CharSequence
Overrides:
toString in class Object
Returns:
the string itself.
我們還是 翻譯一下吧:
這個對象自己(它已經是一個字符串了)就是返回值
說明:
CharSequence接口中的toString方法
重寫:
重寫了Object中的toString方法
返回:
自己本身的字符串
我們可以看到,String類繼承Object類,並且重寫了toString 方法,也就是說他有自己的toString方法,它返回一個自己本身的字符串,而自己本身就是字符串對象,這樣 就不會出現一推哈希碼了。
在這裡為了更加明確,我們從“說明”中看到,String中toString方法是 CharSequence接口的toString方法,那我們看一看java.lang.CharSequence接口的toString方法的定義:
toString
String toString()
Returns a string containing the characters in this sequence in the same order as this sequence. The length of the string will be the length of this sequence.
Overrides:
toString in class Object
Returns:
a string consisting of exactly this sequence of characters
我們還是翻譯一下:
返回一個字符串,該字符串包含了與這個序列順序相同的 所有字符。字符串的長度就是該序列的長度
重寫:
Object的toString
返回:
由該序列的特定 的字符組成的字符串
在C語言中,string就是char[]數組,在Java中也是一樣,它也是有字符數組定義的, 上面的序列我們可以理解為字符數組
從上面我們可以看出很多類中的toString方法都改變了,我們可 以做一個實驗,我們把一個類的toString方法改變一下
我們起這個類的名字叫做 TestObject
public class TestObject extends Object{
public static void main(String[] args) {
TestObject ns = new TestObject();
System.out.println (ns);
}
}
這個類的輸出結果應該是 類名@哈希碼 : TestObject@de6ced (注意:哈希碼是不固定的)
我們把這個類的toString方法改變一下
public class TestObject extends Object{
public String toString() {
return "我是一個類!";
}
public static void main(String[] args) {
TestObject ns = new TestObject();
System.out.println (ns);
}
}
之後我們在運行就發現結果是 "我是一個類!"