如何防止覆盖(override)toString方法时产生递归调用

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!    在Java中任何对象都继承于Object类,因此,每个类都有一个toString方法用于返回当前对象的字符串形式(可能是对象地址或其他和对象相关的信息)。
本文为原创,如需转载,请注明作者和出处,谢谢!

    在 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 方法才能返回正确的结果。


国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

目录
相关文章
|
7月前
|
存储 Java 程序员
equals方法深入解析
equals方法深入解析
140 0
|
13小时前
|
存储 Java
|
1月前
|
自然语言处理 算法 Java
为什么说重写equals时要重写hashcode
为什么说重写equals时要重写hashcode
|
8月前
方法的覆盖Override
方法的覆盖Override
28 0
|
5月前
【static + 代码块+toString打印对象】
【static + 代码块+toString打印对象】
47 0
|
8月前
|
存储 Java
引以为戒:避免在Set中使用未重写equals和hashCode的引用对象进行去重
在日常的Java开发中,我们经常会使用Set集合来实现去重操作,确保集合中不含有重复的元素。然而,如果使用未重写equals()和hashCode()方法的引用对象进行去重,可能会导致意外的行为,最近了在项目中就遇到了这个情况,让我们深入探讨这个问题,并引以为戒,确保正确实现去重操作。
45 0
引以为戒:避免在Set中使用未重写equals和hashCode的引用对象进行去重
|
9月前
|
存储 Java
重写equals方法
我们在java程序中调用自带的equals方法时,你是否会有这样的疑问:明明我比较的数据都一样啊,为什么会返回false呢?有些人可能还会疑问,怎么有时候返回true?有时候返回false呢?这是为什么呢?其实是和Java底层人家写的equals方法逻辑有关系
println输入和toString方法的重写
println输入和toString方法的重写
|
存储
"=="和 equals 方法究竟有什么区别?
"=="和 equals 方法究竟有什么区别?
93 0
|
Java 编译器
重写,重写规则 Super 关键字的使用,重写与重载之间的区别 , @override有什么用,以及加不加@override有什么区别
重写,重写规则 Super 关键字的使用,重写与重载之间的区别 , @override有什么用,以及加不加@override有什么区别
194 0