ArrayList al=null 和ArrayList al=new ArrayList()

ArrayList al=null 和ArrayList al=new ArrayList()有什么区别

ArrayList al=new ArrayList();相当于ArrayList al;al = new ArrayList();
而ArrayList al;相当于ArrayList al = null;

这样比较吧,你现在要去盛水,new出来表示你有个空水杯,你可以去盛水,但现在水杯里没水,null代表你连水杯都没有,现在去盛水是会出问题的,比如空指针异常。

用面向对象来说,就是ArrayList al=null 是你在创建一个对象a1的时候给他一个引用,但是这个引用是空的,就是给了一个以后可以指向其他对对象的引用(相当于指针)
而new ArrayList()的new是开辟一块内存空间的意思,ArrayList()是调用构造函数创建出的一个对象或实例.也就是ArrayList al;al = new ArrayList();是创建了一个具体存在的对象或实例

ArrayList al=null:表示没有创建ArrayList的实例,将不能够被引用;
ArrayList al=new ArrayList();表示创建了一个ArrayList对象,可以
通过al对象进行操作ArrayList中的方法

ArrayList al=null 和ArrayList al=new ArrayList()有什么区别

ArrayList al=null ;//这个就是直接给个null值给ArrayList类型的对象,没有分配内存空间
ArrayList al=new ArrayList();//new了,就是实例化ArrayList对象了,分配了内存空间。实例化之后就可以使用ArrayList对象的其它方法。

我赞同极简的说法,前者没分配内存空间,后者分配内存空间

从堆和栈的角度解释的话:ArrayList al = null ,就是在栈上放了一个名称,叫 al,并把它贴上了一个标签:它只能指向堆中的一个 ArrayList 类(其实还包括 ArrayList 的派生类),你把它赋值为 null,为空的,代表它还没有指向一个堆中的哪个实例,仅仅有个标签而已。当你再写一句: al = new ArrayList(),意思就是你在堆中建了一个实例,并让这个 al 指向它。
ArrayList al = null;al = new ArrayList(); 和 ArrayList al =new ArrayList()等价。