这在Java中 - 线程"main"java.lang.StackOverflowError中的异常

Bor*_*yev 6 java stack-overflow

为什么我收到stackoverflow错误?

我的课 -

public class Tester {

int id;

 Tester(int id){
  this.id = id;
 }

 public String toString(){

  String rep = "Hex: " + this + ", Id: " + this.id;
  return rep;
 }

}
Run Code Online (Sandbox Code Playgroud)

主要方法 -

class Driver{

    public static void main(String [] args){

        Tester t = new Tester(123);
        System.out.println(t);

    }

}
Run Code Online (Sandbox Code Playgroud)

错误 -

Exception in thread "main" java.lang.StackOverflowError
    at java.lang.String.length(Unknown Source)
    at java.lang.AbstractStringBuilder.append(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)
    at java.lang.StringBuilder.<init>(Unknown Source)
    at com.examscam.model.Tester.toString(Tester.java:13)
    at java.lang.String.valueOf(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)

---------REPEAT !!!
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 16

因为

"Hex: " + this
Run Code Online (Sandbox Code Playgroud)

相当于

"Hex: " + this.toString()
Run Code Online (Sandbox Code Playgroud)

并且你是从那里做的toString(),所以toString()调用自己,调用自己,自称...


Par*_*l S 5

你写了:

String rep = "Hex: " + this + ", Id: " + this.id;
Run Code Online (Sandbox Code Playgroud)

在Java中,简单地编写this意味着您在间接调用this.toString()

我相信您正在尝试覆盖您要打印的id和对象的id的版本中的toString()方法。ObjecttoString()hashcode

所以要得到输出替换

String rep = "Hex: " + this + ", Id: " + this.id;
Run Code Online (Sandbox Code Playgroud)

String rep = "Hex: "+ this.getClass().getName().hashCode() +", Id: " + id;
Run Code Online (Sandbox Code Playgroud)

您将得到的输出为:

Hex: 1800024669, Id: 123
Run Code Online (Sandbox Code Playgroud)