Java 运行时堆栈溢出错误

Java 运行时堆栈溢出错误,java,Java,当我运行这段代码时,我在运行时得到一个stackoverflowerrror。为什么我会得到这个例外 class F{ String name; int rollNo; F ref; F(String name,int rollNo){ this.name = name; this.rollNo = rollNo; ref = this; } public static void main(St

当我运行这段代码时,我在运行时得到一个
stackoverflowerrror
。为什么我会得到这个例外

 class F{
    String name;
    int rollNo;
    F ref;

    F(String name,int rollNo){
        this.name = name;
        this.rollNo = rollNo;
        ref = this;
    }

    public static void main(String[] args){
        F f = new F("Shivam",138);
        System.out.println(f);
    }

    public String toString(){
        return name+" "+rollNo+" "+ref;
    }
}
这是我得到的一个例外:

Exception in thread "main" java.lang.StackOverflowError
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
    at java.lang.StringBuilder.append(StringBuilder.java:136)
    at F.toString(F.java:20)
    at java.lang.String.valueOf(String.java:2994)
    at java.lang.StringBuilder.append(StringBuilder.java:131)
    at F.toString(F.java:20)
    at java.lang.String.valueOf(String.java:2994)
    at java.lang.StringBuilder.append(StringBuilder.java:131)
    at F.toString(F.java:20)
    at java.lang.String.valueOf(String.java:2994)
当此行执行
toString()
调用的
f
对象的方法时。及 请参阅
toString()的实现

再次连接
ref
对象,因此,
toString
方法递归地无限调用。 将
toString
的实现更改为此

public String toString(){
    return name+" "+rollNo;
}
当此行执行
toString()
调用的
f
对象的方法时。及 请参阅
toString()的实现

再次连接
ref
对象,因此,
toString
方法递归地无限调用。 将
toString
的实现更改为此

public String toString(){
    return name+" "+rollNo;
}

这是因为您正在使用
ref
进行自引用,并在
toString()
中打印,这会创建被调用的
toString()
的无限递归。首先不确定您为什么需要自我参考,您可以在需要时使用
this
。如果您确实需要
ref
,可以将其从
toString()
方法中删除,它应该可以工作。

这是因为您正在使用
ref
进行自引用,并在
toString()
中打印,从而创建被调用的
toString()
的无休止的递归。首先不确定您为什么需要自我参考,您可以在需要时使用
this
。如果您确实需要
ref
,您可以将其从
toString()
方法中删除,它应该可以工作。

当您使用ref-it调用其toString()方法时,被重写的方法toString()出现问题,同样的方法调用变成了递归,从而导致问题。
您应该使用类的字段,而不是同一个类对象。

当您使用ref it调用其toString()方法时,重写的方法toString()出现问题,并且同一方法调用再次变成递归,从而导致问题。
您应该使用类的字段而不是同一个类对象。

您希望程序打印什么?问题在于toString()中包含了“ref”。通过在其中包含“ref”,它尝试在toString()方法本身中计算ref.toString。如果您可以共享toString的预期输出,那就更好了。这只是一个无休止的递归问题。System.out.println(f);是否重新检查问题。在字段中保留对对象本身的引用是没有意义的。您可以通过
this
从实例中的任何位置引用对象本身。您希望程序打印什么?问题在于toString()中包含了“ref”。通过在其中包含“ref”,它尝试在toString()方法本身中计算ref.toString。如果您可以共享toString的预期输出,那就更好了。这只是一个无休止的递归问题。System.out.println(f);是否重新检查问题。在字段中保留对对象本身的引用是没有意义的。您可以通过
this
从实例中的任何位置引用对象本身。
public String toString(){
    return name+" "+rollNo;
}