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 为什么呢?
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 为什么呢?
因为假如不将score声明为数组,而声明为Stirng变量,问题就不存在了。
大概原因是String类是不可变类,所以每次使用“=”号赋值都会创建一个新对象。
但String[]就不一样了,java会将这个数组看作一个Object对象.
可是lz的问题具体原因我都不清楚
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);
}
大概原因是String类是不可变类,所以每次使用“=”号赋值都会创建一个新对象。
=============================================================================
是一样的道理啊,正因为每次使用“=”号赋值都会创建一个新对象所以声明为Stirng变量,问题当然就不存在了。