先看空指针异常:
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.youkuaiyun.com/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新的对象。
本文介绍了在使用Java List集合时遇到的两个常见问题:一是通过null初始化List导致的空指针异常,解决办法是在创建时避免为空;二是循环赋值时已保存的对象值被改变,原因是值类型与引用类型混淆,解决策略是每次循环中创建新对象再添加。
6536

被折叠的 条评论
为什么被折叠?



