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  为什么呢?

解决方案 »

  1.   

    往LIst中添加的score相当于一个引用,当你要从List中取Score时,它会找到Score的内存地址,然后取值。而不是把Score的内容移植到了List中,所以你虽让三次循环都添加了Score,因为变量名相同,List中记录的地址是相同的,而Score内容在循环过程中已经被覆盖了。
      

  2.   

    问题也不像ls说得这么简单
    因为假如不将score声明为数组,而声明为Stirng变量,问题就不存在了。
    大概原因是String类是不可变类,所以每次使用“=”号赋值都会创建一个新对象。
    但String[]就不一样了,java会将这个数组看作一个Object对象.
    可是lz的问题具体原因我都不清楚
      

  3.   

    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);
         }
      

  4.   

    因为假如不将score声明为数组,而声明为Stirng变量,问题就不存在了。
    大概原因是String类是不可变类,所以每次使用“=”号赋值都会创建一个新对象。
    =============================================================================
    是一样的道理啊,正因为每次使用“=”号赋值都会创建一个新对象所以声明为Stirng变量,问题当然就不存在了。