0

我有一个ArrayQueue我正在用java语言实现一个类。

我将事务对象存储在其中,ArrayQueue并且我陷入了该display()方法(又名我自己的toString())。但它只是返回参考。

这是我的方法:

//display the elements in the current queue
public String display() {

  String result = "";

  if(isEmpty()) {
        throw new EmptyQueueException("Queue is empty.");
  } else {
     for (int i = 0; i < count; i++) {
       result += "[" + Q[(front + i) % capacity] + "] ";
     }
  }

  return result;
}

这是否意味着我需要toString()为我的对象提供一个方法并将其称为:System.out.println(arrayqueue.display().toString())

4

3 回答 3

1

当你调用代码时

result += "[" + Q[(front + i) % capacity] + "] ";

您正在对包含在 Q 数组中该位置的对象调用 toString() 方法。默认对象 toString() 将打印其内存位置。如果您的对象已经声明了要打印的不同数据,例如要打印对象类名的 object.getClass(),则您不必重写 toString() 而是在上面的代码中调用该方法。当然,如果您想要一个比其内存位置更好地代表您的对象的自定义字符串,那么在该对象的类中覆盖 toString() 会很好。

于 2013-11-14T23:45:03.723 回答
1

如果您覆盖toString()您的ArrayQueue课程,您可以使用:

System.out.println(arrayqueue);

但是如果你选择调用它display(),那么是的,你需要这个:

System.out.println(arrayqueue.display())

运行时环境应该如何知道您想要字符串表示而不是对象引用?

于 2013-11-14T23:21:06.513 回答
1

这是否意味着我的对象需要一个 toString() 方法并将其称为:System.out.println(arrayqueue.display().toString())?

不,因为display()返回 a Stringarrayqueue.display()应该就足够了。您是否正在尝试打印 的toString()arrayqueue?如果不覆盖toString(),它将默认返回类名和哈希码。

于 2013-11-14T23:24:53.843 回答