如何打印新对象的参数?

时间:2018-08-18 09:55:07

标签: java tostring

我不理解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。

3 个答案:

答案 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;
    }