我不理解Java中的一些示例。
public class Pair {
private int a;
private int b;
public Pair(){
}
public Pair(int x, int y) {
a = x;
b = y;
}
}
第二堂课
public class First extends Pair {
public First(int x, int y) {
super(x,y);
}
public static void main(String[] args) {
Pair pair = new Pair(10,11);
String s = "It is equal " + pair;
System.out.println(pair);
}
}
因为它使用了字符串的串联,所以它会自动被类Pair中的方法称为toString(),
因此结果应为:“等于(10,11)”。
为什么会显示我在内存中的位置?
也许我应该像这样调用方法:
public void show(){
System.out.println(a + "" + b);
}
但是在示例中没有show()方法,只有上面的String。
答案 0 :(得分:1)
这是正确的,因为jvm从对象类调用toString的默认实现,该对象实现显示身份哈希码。如果想要这样的输出,则可以在Pair类中重写toString()方法,如下所示:
@Override
protected String toString{
return "("+a+","+b+")";
}
执行此操作后,您将覆盖toString()方法,您将获得预期的结果。
建议重写toString方法,因为它有帮助 调试并提供有意义的日志。
答案 1 :(得分:0)
由于您没有重写class的ToString()方法,因此它将调用Object类toString()本身为您提供Object的内存位置。
所以解决方案是您必须重写类中的toString()并将所需的代码段放在此处,以便在打印对象ref时。您覆盖的toString()将被调用,并显示预期结果。
谢谢
答案 2 :(得分:0)
在Pair类中用预期的结果覆盖toString。 喜欢
@Override
public String toString() {
int c=a+b;
return "Pair =" + c;
}