0

我有一个类,它有一个采用字符串的方法。然后我有一个方法返回上述方法的值。当我在我的主类中获得返回值并打印它时,打印的值为“ExamQuestion@143c8b3”。如何让它正确打印?

谢谢

4

5 回答 5

2

您应该让 ExamQuestion 覆盖 toString()。

于 2013-02-07T04:53:49.960 回答
2

每当您获得格式“@”时,这就是对象的 toString() 方法的默认格式。

来电System.out.println(question);来电ExamQuestion.toString()。如果方法没有被覆盖,超类中的版本将被调用,在这种情况下它将是Object的版本。

所以这就是你得到 ExamQuestion@143c8b3 的原因。

要解决此问题,请将以下方法放入您的 ExamQuestion 类中:

public String toString() {
    // return a string that means something here
}
于 2013-02-07T04:58:28.773 回答
1

您看到的输出是 java 如何将对象表示为字符串。

默认行为是:

this.getClass().getSimpleName() + "@" + Integer.toHexString(this.hashCode());

如果您希望对象的字符串表示更清晰,则应覆盖toString()类中的方法。

于 2013-02-07T04:56:31.007 回答
1

这是@ValekHalfHeart 在他的回答中解释的默认行为。

如果要打印对象的内容,则需要覆盖toString类中的方法。

说我有这个代码:

class MyClass{
   int a,b;
}

因此,当我创建此类的对象并将其传递给println

public static void main(String args[]){
  MyClass m = new MyClass();
  m.a = 20;
  m.b = 30;
  System.out.println(m);
}

MyClass@143c8b3它会像你的情况一样打印一些东西。

所以现在,如果我想要,每当我将对象传递给它时,println它应该打印一些其他的东西,比如我的变量的值,a并且b应该被打印出来。

然后我应该覆盖tostring方法MyClass

class MyClass{
   int a,b;

   public String toString(){
     return "MyClass values: a = "+a+" and b = "+b;
   }
}

所以现在当我说这个

public static void main(String args[]){
  MyClass m = new MyClass();
  m.a = 20;
  m.b = 30;
  System.out.println(m);
}

它要打印MyClass values: a = 20 and b = 30

所以你必须为你的ExamQuestion班级这样做

于 2013-02-07T05:04:52.220 回答
0

所有类都(隐式)继承自Object,它具有toString()方法,其实现正在产生您所看到的输出。

要获得有意义的字符串表示,您必须重写此方法以提供适合您的类的实现。

于 2013-02-07T05:01:22.090 回答