2014-10-05 48 views
0

我正在嘗試做一些非常簡單的事情,但我似乎無法使其工作。我試圖遍歷一個ArrayList,但是當我將結果輸出到終端時,我的for循環總是返回相同的值。對象使用相同的值,即使使用「新」

下面是代碼:

import java.util.*; 

public class Contact{ 
    public static ArrayList<Contact> contacts = new ArrayList<Contact>(); 
    public static String name; 
    public static String phoneNumber; 
    public static String email; 
    private static int idCounter = 0; 
    private final int contactID; 

    public static void main(String[] args){ 
     Contact bob = new Contact("bob","8493483943","[email protected]"); 
     Contact joe = new Contact("joe","940389439","[email protected]"); 
     ArrayList<Contact> contacts = new ArrayList<Contact>(); 
     contacts.add(bob); 
     contacts.add(joe); 
     for (Contact person : contacts) { 
      System.out.println(person.idCounter); 
      System.out.println(person.name); 
      System.out.println(person.phoneNumber); 
      System.out.println(person.email); 
      System.out.println(); 
     } 
    } 

    public Contact(String name,String phoneNumber,String email){ 
     this.contactID = idCounter++; 
     this.name = name; 
     this.phoneNumber = phoneNumber; 
     this.email = email; 
    } 
} 

上面的代碼總是返回此,當我運行代碼:

2 
joe 
940389439 
[email protected] 

2 
joe 
940389439 
[email protected] 

它返回即使我已經添加了2個不同的對象到相同的信息ArrayList。

當我做這裏面的for循環:

System.out.println(person); 

它返回不同的ID的一個聯繫人對象。

我有點困惑,爲什麼這會發生,因爲我假設我沒有在這裏引用相同的變量或對象,或者我在循環中做錯了什麼。

如果有人可以幫我解釋一下會發生什麼,那很好,謝謝!

+0

你的第4行'public static ArrayList contacts = new ArrayList ();''應該被刪除,因爲你要重新聲明它。 – 2014-10-05 00:42:11

+0

@AnubianNoob即使我刪除它,它也會返回相同的值 – Jamaal 2014-10-05 00:43:55

回答

1

您的屬性是靜態的:名稱,電話號碼和電子郵件。刪除靜態關鍵字[static關鍵字make classlevel屬性:) :)

+1

謝謝,您的回答非常有幫助! – Jamaal 2014-10-05 01:10:49

0

所有的類變量都是靜態的。這意味着它們將被覆蓋,創建第二個對象。

相關問題