我有一个类有一个带字符串的方法。然后我有一个方法返回上述方法的值。当我在主类中获得返回值并打印出来时,打印值为“ExamQuestion @ 143c8b3”。如何让它正确打印?
由于
答案 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
时我都想要它,那么它应该打印其他内容,例如我的变量值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
班级
答案 4 :(得分:0)
所有类都从({1}}继承(隐式),它具有Object
方法,其实现产生您正在看到的输出。
要拥有有意义的字符串表示形式,您必须覆盖此方法,以提供适合您的类的实现。