我有一个类,它有一个采用字符串的方法。然后我有一个方法返回上述方法的值。当我在我的主类中获得返回值并打印它时,打印的值为“ExamQuestion@143c8b3”。如何让它正确打印?
谢谢
我有一个类,它有一个采用字符串的方法。然后我有一个方法返回上述方法的值。当我在我的主类中获得返回值并打印它时,打印的值为“ExamQuestion@143c8b3”。如何让它正确打印?
谢谢
您应该让 ExamQuestion 覆盖 toString()。
每当您获得格式“@”时,这就是对象的 toString() 方法的默认格式。
来电System.out.println(question);
来电ExamQuestion.toString()
。如果方法没有被覆盖,超类中的版本将被调用,在这种情况下它将是Object
的版本。
所以这就是你得到 ExamQuestion@143c8b3 的原因。
要解决此问题,请将以下方法放入您的 ExamQuestion 类中:
public String toString() {
// return a string that means something here
}
您看到的输出是 java 如何将对象表示为字符串。
默认行为是:
this.getClass().getSimpleName() + "@" + Integer.toHexString(this.hashCode());
如果您希望对象的字符串表示更清晰,则应覆盖toString()
类中的方法。
这是@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
班级这样做
所有类都(隐式)继承自Object
,它具有toString()
方法,其实现正在产生您所看到的输出。
要获得有意义的字符串表示,您必须重写此方法以提供适合您的类的实现。