我定义了一个Person类,然后要把这个Person类的实例逐个添加到队列中,会出现后面的值把前面的值覆盖等问题。具体如下:
Person.java
package com.test;
public class Person {
private String country;
private String city;
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
Test.java
import java.util.concurrent.LinkedBlockingQueue;
public class Test {
public static void main(String[] args){
function();
}
static void function(){
Person person = new Person();
BlockingQueue queue = new LinkedBlockingQueue();
String[] countries = {"China","USA"};
String[] cities = {"Beijing","Washington"};
for(int i = 0 ; i < 2 ; i ++){
// Person person = new Person(); //(1)
person.setCountry(countries[i]);
person.setCity(cities[i]);
queue.add(person);
System.out.println(person.getCountry());
// System.out.println(queue.poll().getCountry()); //(2)
}
System.out.println(queue.poll().getCountry()); //(3)
System.out.println(queue.poll().getCountry()); //(3)
}
}
程序的输出结果是:
China
USA
USA
USA
后入队的把前面的给覆盖掉了,但要是把输出放到循环里的话则显示正常,即把(3)注释掉,换成(2)输出,则结果为
China
China
USA
USA
正常。
但要是把Person person = new Person();放到for循环里去new的话(代码中(1)处),则上面两种输出都是正确的。
有人能解释下吗?谢谢!