有如下代码:
Customer customer = new Customer();
ArrayList ar = new ArrayList();
try {
getConnection();
stat_ = conn_.createStatement();
rs_ = stat_.executeQuery(sql); while (rs_.next()) {
customer.setCu_id(rs_.getInt("cu_id"));
customer.setCu_name(rs_.getString("cu_name"));
customer.setCu_password(rs_.getString("cu_password"));
ar.add(customer);
customer = new Customer();
}
} catch (Exception e) {
//Logger.error(e);
throw e;
} finally {
close(); }我发现,在ar.add(customer)的时候,ArrayList只是把customer的地址传给了ar[X]。
这样的后果是,本来我想用while循环读出结果存入ArrayList中,但由于每次循环都要对customer赋值(而在ArrayList中存储的只是指向某个customer对象的一个地址),导致前面的customer数据都被覆盖了感觉不应该这样的,请各位指教阿
Customer customer = new Customer();
ArrayList ar = new ArrayList();
try {
getConnection();
stat_ = conn_.createStatement();
rs_ = stat_.executeQuery(sql); while (rs_.next()) {
customer.setCu_id(rs_.getInt("cu_id"));
customer.setCu_name(rs_.getString("cu_name"));
customer.setCu_password(rs_.getString("cu_password"));
ar.add(customer);
customer = new Customer();
}
} catch (Exception e) {
//Logger.error(e);
throw e;
} finally {
close(); }我发现,在ar.add(customer)的时候,ArrayList只是把customer的地址传给了ar[X]。
这样的后果是,本来我想用while循环读出结果存入ArrayList中,但由于每次循环都要对customer赋值(而在ArrayList中存储的只是指向某个customer对象的一个地址),导致前面的customer数据都被覆盖了感觉不应该这样的,请各位指教阿
解决方案 »
- 需要7m,11m,17m的管子各10根,至少需要多少根100m的管子,并求出每根管子的利用率
- 超级菜鸟问一句话!
- 用JAVA 做FTP
- 问个问题 我在线等啊
- 关于跟踪的问题。高手请看内容
- FireFox浏览器是不是用java开发的??
- 怎样获得system memory大小?
- 欢迎大家积极参与JAVA电子杂志调查,给我们杂志提供宝贵意见
- 如何将这一UNICODE字符串转换回中文???
- 简单java加法计算器程序,大家帮忙看看哪错了?谢谢!!!!
- 今天有评论了下java,弄java的,不弄java的,都来看看
- 求助,关于字符串分割的问题,在线,急等,解决问题立即揭贴。。。如有一未知的字符串,可能是String a="3231,3232,3234," ,也可能是Stri
customer = new Customer();各位说说看,这样好吗?
stat_ = conn_.createStatement();
List ar = new ArrayList();
for (ResultSet rs_ = stat_.executeQuery(sql); rs_.next();) {
Customer customer = new Customer();
customer.setCu_id(rs_.getInt("cu_id"));
customer.setCu_name(rs_.getString("cu_name"));
customer.setCu_password(rs_.getString("cu_password"));
ar.add(customer);}
customer = new Customer();
应该不会覆盖之间的数据。
你所说的List是其他一个类还是手误?除此之外,似乎你的版本跟我的未修改过的版本基本一致 famousboy(famousboy) :
我的while里有customer = new Customer(), 是我后来修改后加上去的,我最开始贴的程序是改好的。原来没有这么一句话。
但是我有点怀疑:经过customer = new Customer(),customer发生了什么呢?是不是重新得到了一个空间? 如果是这样的话,那ArrayList指向的旧空间怎么办?如果没有被释放的话,不久内存泄露了?如果被释放了,ArrayList 起先存放的内容不就失效了?(事实上,我发现空间并未被释放)
ArrayList 是继承List接口的,当然可以这么写,
而且这么写符合依赖倒转原则,更加灵活
接口编程是java编程的中心思想
当没有任何引用指向某块空间时,比如执行 ar = null;JVM在一段时间之后就会回收这些空间,这时你之前创建的所有customer对象才会从内存中消失。
我所不明白的是,ArrayList真的“存储的只是指向某个customer对象的一个地址”?那样的话,似乎有时候对ArrayList和Vection的讨论很多都没有意义了