返回信息流我擦一楼说的对,我贴错了,kaka,第一组是对的,第二组不对
————————————————————
今天写程序遇到的
可能有点傻
大家帮忙看看
谢谢
这是一条镜像帖。来源:北邮人论坛 / java / #52257同步于 2016/8/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
一个java小问题,蒙圈了
alisapapapa
2016/8/9镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
我还以为Java用户都知道array.add(record)只是把record的指针加入array。第一种是每次创建一个新的record加入array,但第二种是只创建一个record,每次只把它的指针加到array里,到最后,array里全都是一样的指针,都指向同一个record,但这个record被一次又一次地修改。
p.s. 顺便安利一下Rust语言。Rust的“所有制”机制让你无法犯这种错误:
fn wrong() {
let mut array: Vec<Vec<String>> = Vec::new();
let mut record: Vec<String> = Vec::new(2);
for result in result_set.iter() {
record[0] = result.get_string("username");
record[1] = result.get_string("SeriesID");
array.push(record); // 出错:这一步应该把record的所有权转移给array,但这里record的所有权已经没了。
// 根本原因是,因为有循环,rust知道:第一次循环时record的所有权转移给array了,第二次循环,record就已经没了。
}
}
fn right() {
let mut array: Vec<Vec<String>> = Vec::new();
for result in result_set.iter() {
let mut record: Vec<String> = Vec::new(2);
record[0] = result.get_string("username");
record[1] = result.get_string("SeriesID");
array.push(record); // 正确。因为每次record都是新的,这里还是拥有所有权的。
}
}
暖神居然换头像了[ema13][ema13]
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 我还以为Java用户都知道array.add(record)只是把record的指针加入array。第一种是每次创建一个新的record加入array,但第二种...
: p.s. 顺便安利一下Rust语言。Rust的“所有制”机制让你无法犯这种错误:
: ...................
我怎么觉得你说反了?array对于第二种存的永远都是指向同一个string数组吧?
【 在 guanzhe 的大作中提到: 】
: 应该是第一个只会得到一条记录吧。因为你始终在对同一个对象赋值,也就是说每次新值都会覆盖上一次的结果,在array里你永远只会得到一个record
哈哈~是我说反了。。
【 在 chftianxia 的大作中提到: 】
: 我怎么觉得你说反了?array对于第二种存的永远都是指向同一个string数组吧?
瞬间明白,小白受教啦
【 在 nuanyangyang 的大作中提到: 】
: 我还以为Java用户都知道array.add(record)只是把record的指针加入array。第一种是每次创建一个新的record加入array,但第二种是只创建一个record,每次只把它的指针加到array里,到最后,array里全都是一样的指针,都指向同一个record,但这个record被一次又一次地修改。
: p.s. 顺便安利一下Rust语言。Rust的“所有制”机制让你无法犯这种错误:
: [code=c]
: ...................
擦擦,,上午喵了一眼,刚看到后面还附了代码解释,非常感谢
【 在 nuanyangyang 的大作中提到: 】
: 我还以为Java用户都知道array.add(record)只是把record的指针加入array。第一种是每次创建一个新的record加入array,但第二种是只创建一个record,每次只把它的指针加到array里,到最后,array里全都是一样的指针,都指向同一个record,但这个record被一次又一次地修改。
: p.s. 顺便安利一下Rust语言。Rust的“所有制”机制让你无法犯这种错误:
: [code=c]
: ...................