日期:2014-05-20  浏览次数:20994 次

在ArrayList中存放的字符串数组为什么自动清空了?
Java code

    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]都是空呢?

------解决方案--------------------
Java code

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

------解决方案--------------------
这些都是引用变量,如果你把它们赋给其它的话
修改任何一处都会导致原来的值被修改
------解决方案--------------------
数组和对象都是存储引用的。

tempal和你list里的对象都是同一个,你可以通过==判断一下,因为它们是同一个引用,只是名称不同而已。
------解决方案--------------------
探讨
数组和对象都是存储引用的。

tempal和你list里的对象都是同一个,你可以通过==判断一下,因为它们是同一个引用,只是名称不同而已。