黑马程序员技术交流社区

标题: ArrayList中存放的字符串数组为什么自动清空了? [打印本页]

作者: 王新春    时间: 2011-11-17 08:57
标题: ArrayList中存放的字符串数组为什么自动清空了?
public static ArrayList ReadSqlConfing(String str) throws FileNotFoundException, IOException{
        FileReader myFileReader=new FileReader(str);
        BufferedReader myBufferedReader=new BufferedReader(myFileReader);

        String myString=null;
        ArrayList<String []> myal=new ArrayList<String []>();
        
        String mysql="";
        String filename="";
       //tempal[0]="";
       //tempal[1]="";
        //String tmpstr[]=new String[2];
        /*while((myString=myBufferedReader.readLine())!=null)
        { System.out.println(myString);
        }*/
         
        int i=0;
       while((myString=myBufferedReader.readLine())!=null)
        { //System.out.println(myString.indexOf("//-->"));
           if(myString.indexOf("//-->")>=0){
                filename=myString.replace("//-->","");//取得要保存的文件名
                //System.out.println(filename);
               String tempal[]=new String[2];
                tempal[0]=mysql;
                tempal[1]=filename;
                //myal.add(i,new String[2]);
                myal.add(i,tempal);
                i++;
                System.out.println("i="+i+"  filename="+filename+" ");
                mysql="";
                filename="";
                tempal[0]="";
                tempal[1]="";
           }
           else{
              mysql=mysql+myString;
           }
        }
       myFileReader.close();
      
       for(int m=0;m<myal.size();m++){
           String tempal[]=new String[2];
           tempal= (String[])myal.get(m);
           System.out.println(tempal[0]);
           System.out.println(tempal[1]);
       }
        return myal;
    }


这段代码为什么在最后打出来的tempal[0]和tempal[1]都是空呢?
作者: 任俊杰    时间: 2011-11-17 09:12
因为你这里 :
  tempal[0]="";
  tempal[1]="";
第次都赋值为空呀,结果当然为空。
                                 |------>(3)String
(1)myal -----> (2)多个String[]------->|------->(3)String
                                                     |-------->(3)String
每次运行
tempal[0]="";
  tempal[1]="";
这个后,就相当在上面的第二步那个地方给那个String[]的两个引用赋值。
那个filename开始是赋值成功了的,但你后面又把它替换成空了。
所以结果就是空了。
作者: 强子    时间: 2011-11-17 09:43
楼上正解 可以试试我这个
                String[] str = new String[3];
                List<String[]> list = new ArrayList<String[]>();
                str[0] = "1";
                str[1] = "2";
                str[2] = "3";
                list.add(str);
                System.out.println(list.get(0)[0]+"||||"+list.get(0)[1]+"|||"+list.get(0)[2]);
                str[0] = "";
                str[1] = "";
                System.out.println(list.get(0)[0]+"||||"+list.get(0)[1]+"|||"+list.get(0)[2]);
而且你这句
tempal[0]="";
tempal[1]="";
的意义是什么呢?
你在循环中String tempal[]=new String[2];就不必手动的去清空它了吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2