justforme123 2010-09-10 14:26
浏览 189
已采纳

往队列里添加自定义的类时值会被覆盖等问题

我定义了一个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)处),则上面两种输出都是正确的。
有人能解释下吗?谢谢!

  • 写回答

1条回答 默认 最新

  • iteye_14351 2010-09-10 15:37
    关注

    new的作用就是创建一个人。如果在循环外面,只new一次,但是给这个人赋值2次,所以会覆盖。放在循环里面,每次循环时创建一个人并给附一个值,就没有覆盖现象了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线