论坛首页 入门技术论坛

不小心犯的一个空指针错误

浏览 7690 次
该帖已经被评为新手帖
作者 正文
   发表时间: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没有被回收!!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics