将ExamQuestion @ 143c8b3作为打印输出在控制台中

时间:2013-02-07 04:50:51

标签: java class methods println main-method

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

由于

5 个答案:

答案 0 :(得分:2)

你应该让ExamQuestion重写toString()。

答案 1 :(得分:2)

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

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

这就是为什么你得到ExamQuestion @ 143c8b3。

要解决此问题,请在ExamQuestion类中添加以下方法:

public String toString() {
    // return a string that means something here
}

答案 2 :(得分:1)

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

默认行为是:

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

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

答案 3 :(得分: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时我都想要它,那么它应该打印其他内容,例如我的变量值ab应打印出来。

然后我应该覆盖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班级

执行此操作

答案 4 :(得分:0)

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

要拥有有意义的字符串表示形式,您必须覆盖此方法,以提供适合您的类的实现。