2015-01-14 37 views
-1

現在,我希望它只打印它所說的內容,而沒有內存地址。我將如何實現這一目標?陣列儘管被忽略,仍然打印內存地址

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等它給我的輸出:

山姆wasdfgn [123456 :efdg] [LTelefonnummer; @ 28d93b30

最後一部分,內存地址位,是我想擺脫的部分。 再次,我如何實現這一目標?

編輯:我試圖覆蓋,但它根本沒有做任何事情。會不會有另一個問題?

+2

給'Telefonnummer'一個'的toString()'覆蓋! –

+0

不是內存地址,它是散列碼,做什麼Hovercraft建議 –

+0

這個數字不是內存地址,它是Object的hashCode()。 –

回答

1

default behaviour for toString是打印類型名稱(L後跟類型名稱),後面跟着@和hashCode的hexString(默認爲對象的內存地址)。

要改變這種情況,請覆蓋您的Telefonnummer類的toString方法。

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

hashCode使用內存地址的想法是一個歷史人造的事物http://stackoverflow.com/questions/36236615/does-object-tostring-or-object-hashcode-ever-give-the-memory-address-of-the -obje – Raedwald