一个数组和List的问题

mooninday 2007-08-26 11:24:13
public List getScore(){

List finalList = new ArrayList();
String[] score = new String[2];

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
int k = (int) (Math.random() * 100);
score[j]=Integer.toString(k);
}
finalList.add(score);
}

return finalList;
}
请问:为什么这个方法返回出来的List里的3个数组的内容是一样的?都是最后一次循环所随即出来的数组.

比如:3次循环所循环出来的数组的数据分别是:11,34 24,54 35,87
但是在finalList里的3个数组都是35,87 为什么呢?
...全文
162 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanseliuying 2007-08-26
  • 打赏
  • 举报
回复
因为假如不将score声明为数组,而声明为Stirng变量,问题就不存在了。
大概原因是String类是不可变类,所以每次使用“=”号赋值都会创建一个新对象。
=============================================================================
是一样的道理啊,正因为每次使用“=”号赋值都会创建一个新对象所以声明为Stirng变量,问题当然就不存在了。
sun_gv 2007-08-26
  • 打赏
  • 举报
回复
List finalList = new ArrayList();

for (int i = 0; i < 3; i++) {
String[] score = new String[2];
for (int j = 0; j < 2; j++) {
int k = (int) (Math.random() * 100);
score[j]=Integer.toString(k);
}
finalList.add(score);
}

raycome 2007-08-26
  • 打赏
  • 举报
回复
问题也不像ls说得这么简单
因为假如不将score声明为数组,而声明为Stirng变量,问题就不存在了。
大概原因是String类是不可变类,所以每次使用“=”号赋值都会创建一个新对象。
但String[]就不一样了,java会将这个数组看作一个Object对象.
可是lz的问题具体原因我都不清楚
lanseliuying 2007-08-26
  • 打赏
  • 举报
回复
往LIst中添加的score相当于一个引用,当你要从List中取Score时,它会找到Score的内存地址,然后取值。而不是把Score的内容移植到了List中,所以你虽让三次循环都添加了Score,因为变量名相同,List中记录的地址是相同的,而Score内容在循环过程中已经被覆盖了。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧