2014-10-05 49 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

所有的类变量都是静态的。这意味着它们将被覆盖,创建第二个对象。

相关问题