在Java中任何對象都繼承于Object類,是以,每個類都有一個toString方法用于傳回目前對象的字元串形式(可能是對象位址或其他和對象相關的資訊)。在每個類中也可以覆寫toString方法以傳回自定義的字元串。如下面的代碼将以一定的格式傳回對象的位址:
package string;
public class InfiniteRecursion
{
public String toString()
{
return "address:" + this;
}
public static void main(String[] args)
System.out.println(new InfiniteRecursion().toString());
}
如果運作上面的程式,将抛出StackOverflowError異常,這說明程式的工作棧溢出了。導緻這種情況最常見的錯誤就是無限遞歸。這們發現在toString中使用this來傳回對象的位址,如果這樣調用,将會無限調用InfiniteRecursion類的toString方法。如果要避免這種情況的出現,要将toString改成如下的形式:
public String toString()
return "address:" + super.toString();
也就是說,不能再調用目前類的toString方法,必須調用目前類父類的toString方法才能傳回正确的結果。