Java List集合的坑(add方法報空指針,循環賦值時list已保存的值會改變)

先看空指針異常:

List<MovieInfo> movieInfos= null;

這樣創建時,list指向爲空,修改方法:

List<MovieInfo> movieInfos= new ArrayList<MovieInfo>();

再看list循環賦值的問題:

問題描述:

for (i=0;i<10;i++){
            movieInfoSum.movieId = (int)recommendation.get(i).getItemID();
            movieInfoSum.movieName = movieInfos.get(i).getMovieName();
            movieInfoSum.movieType = movieInfos.get(i).getMovieType();
            movieInfoSum.value = recommendation.get(i).getValue();
            movieInfoSums.add(movieInfoSum);
        }

這段代碼在每一次循環時,都會將新的數值賦值到已保存的list中,比如,

第一個循環結束後:

數據正常加入,進行第二個循環過程中:

List movieInfoSums中已存入的下標0的值改變了,經過蒙逼半天后查找資料(https://blog.csdn.net/single_cong/article/details/80560616),發現是因爲值類型和引用類型沒區分好的問題

修改方法:

for (i=0;i<10;i++){
            MovieInfoSum movieInfoSum = new MovieInfoSum();//將對象創建語句放在循環內
            movieInfoSum.movieId = (int)recommendation.get(i).getItemID();
            movieInfoSum.movieName = movieInfos.get(i).getMovieName();
            movieInfoSum.movieType = movieInfos.get(i).getMovieType();
            movieInfoSum.value = recommendation.get(i).getValue();
            movieInfoSums.add(movieInfoSum);
        }

總結:1,List創建時不置空,2,將對象傳入List時要new新的對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章