ArrayList仅添加最后一个元素

下面有一个for循环代码。我通过调用一个自定义显示函数发现aBook arrayList对象仅添加了最后一个类对象三次。为什么会这样呢?

Scanner s = new Scanner(System.in);

ArrayList<LiFiAddressBook> aBook = new ArrayList<LiFiAddressBook>();

// taking input for every LifIAddressBook and adding them to the ArrayList.

for (int i = 0; i < 3; i++) {

System.out.println("Entry " + i+1);

System.out.print("Please Enter First Name: ");

String a = s.nextLine();

System.out.println();

System.out.print("Please Enter Last Name: ");

String b = s.nextLine();

System.out.println();

System.out.print("Please Enter Street Address: ");

String c = s.nextLine();

System.out.println();

System.out.print("Please Enter City: ");

String d = s.nextLine();

System.out.println();

System.out.print("Please Enter Zip Code: ");

int e = s.nextInt();

// in the next line we need to fire a blank scan function in order consume the nextLine. because after executing s.nextInt compiler skip a scan function for a weird reason

s.nextLine();

System.out.println();

LiFiAddressBook x = new LiFiAddressBook(a, b, c, d, e);

aBook.add(x);

}

这是我的LiFiAddressBook类

public class LiFiAddressBook {

static String first_name, last_name, street_address, city_state;

static int zip_code;

public LiFiAddressBook(String first, String last, String street, String city, int zip) {

//constructor for class object.

first_name = first;

last_name = last;

street_address = street;

city_state = city;

zip_code = zip;

}

public String get_first() {

return first_name;

}

public String get_last() {

return last_name;

}

public String get_address() {

return street_address;

}

public String get_city() {

return city_state;

}

public String get_zip() {

return Integer.toString(zip_code);

}

public static void display() {

System.out.println("First Name: "+first_name);

System.out.println("Last Name: "+last_name);

System.out.println("Street Address"+street_address);

System.out.println("City State: "+city_state);

System.out.println("Zip Code: "+zip_code);

}

}

回答:

由于使用static关键字,每次

public LiFiAddressBook(String , String , String , String , int )

调用构造函数时,旧值都会被新值覆盖,并且在打印列表中的元素时,LiFiAddressBook类的对象变量将指向相同的对象。因此打印相似的对象。

需要明确的是,实际上有3个LiFiAddressBook实例。但是这些LiFiAddressBook实例的变量/属性引用的是同一对象。

以上是 ArrayList仅添加最后一个元素 的全部内容, 来源链接: utcz.com/qa/418095.html

回到顶部