尽管有Override,Array仍会打印内存地址

时间:2015-01-14 18:46:53

标签: java

现在,我希望它只打印它所说的内容,而不是内存地址。我将如何实现这一目标?

    public Telefonnummer[] getTelenummer() {

    Telefonnummer[] tnummer = new Telefonnummer[nummerarray.size()];
    nummerarray.toArray(tnummer);

    System.out.println(Arrays.toString(tnummer) );


    return tnummer;

}

是构造函数和:

    private static void kundSök() {
    System.out.println("...? ");
    String namn = keyboard.nextLine();

    if (kunderna.containsKey(namn)) {
        for (String k : kunderna.keySet()) {
            Kund kund = kunderna.get(k);
            System.out.println(kund);
            System.out.println(kund.getTelenummer());

在我将一个人添加到ArrayList等之后,它给了我一个输出:

Sam wasdfgn [123456:efdg] [LTelefonnummer; @ 28d93b30

最后一部分,内存地址位,是我想要摆脱的部分。 再一次,我如何实现这一目标?

编辑:我试图覆盖,但它根本没有做任何事情。还有其他问题吗?

2 个答案:

答案 0 :(得分:1)

default behaviour for toString是打印类型名称(如L后跟类型名称),后跟@和hashCode的hexString(默认情况下是内存地址)对象)。

要更改此设置,请覆盖toString课程的Telefonnummer方法。

public class Telefonnummer {
  private String nummer;
  ...
  @Override public String toString() {
    return "Dial " + nummer + " for a good time";
  }
}

答案 1 :(得分:0)

Guava库有Joiner,可用于此。见https://code.google.com/p/guava-libraries/wiki/StringsExplained

String str = Joiner.on(",")。join(list);

您还必须在类的列表元素上使用toString函数