锁定老帖子 主题:不小心犯的一个空指针错误
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-17
import java.util.ArrayList; public class Model{ static ArrayList<String> list; static void read(ArrayList<String> list) { System.out.println(Model.list==list);//此次输出true; if(list == null) { list = new ArrayList<String>(); System.out.println(Model.list==list); } list.add("Hello"); System.out.println(Model.list==list);//此次输出false; System.out.println(Model.list); System.out.println(list); } public static void main(String[] args) { Model.read(list); System.out.println(list.size()); } } 首先要了解一点,Java里的引用其实就是C里面的指针,而==比较的是两个引用是否指向同一块内存。 在以下代码中 System.out.println(Model.list==list);//此次输出true; if(list == null) { list = new ArrayList<String>(); System.out.println(Model.list==list); } 两次结果不一样,第一次是true,第二次是false,很显然是list = new ArrayList<String>();这个语句导致的结果不同,而Model.list==list是判断两个引用是否指向同一内存,也就是说,list被重新指向了new ArrayList<String>()开辟的空间,所以就不同,但是Model.list没有改变。继续看下面的: System.out.println(Model.list);//输出为null System.out.println(list);//输出为//[hello] 显然,list没有被回收!! |
|
返回顶楼 | |