List list是声明(定义)一个List类型的变量,list= new ArrayList()是创建一个ArrayList对象(分配内存空间),
关于开辟内存空间的问题你可以这样理解,list是变量名,是对象的引用(就是指针,指向对象所在的地址,虽然java里没有了指针),它是放在栈内存的,而实际的ArrayList对象是放在堆内存的。
所以List list;是在栈里分配空间给list, list= new ArrayList();是在堆分配空间给 ArrayList对象,并将对象的地址给list list无需提前知道是ArrayList还是LinkedList,这是多态,LinkedList和ArrayList是List的子类,父类指针指向子类对象
你看看父类,子类关系,接口的实现类也相当与特殊继承的关系,上面语法定义不报错是因为他们的关系,具(体对象!!!)赋值可以参考下面吧;
List list是声明了一个变量,没有指向一个具体值,如public List
List list;这一行做了什么?
第:只是定义了一种类型,相当于你定义一个人,到底是男人还是女人,还没有确定。
在内存中为list开辟空间了吗?
第:还没有new,所以只是一个引用,还没有真正的开辟空间来存放。
海枫科技
List list 这一句在内存开辟了一个变量,这个变量是用来放地址的,大小是4个字节32bit,目前的地址里面是空的,下一句
list = new Arraylist();
完成了两件事,
一、申请一块默认最小的空间存放list中的数据,好像是8个List单元吧,大小是8*4字节,具体记不清了,可以在DEBUG上看,
二、把这块空间的地址赋值到list变量,也就是把这块空间的首地址,也就是第一个List单元的地址,填写到list变量地址空间
没什么不同,主要第一个是向上转型,因为arraylist实现了list接口,所以可以写成第一种形式,这样做的好处就是方便重构,加入你所用的集合不是arraylist而是linkedlist,只需把list
list
=
new
linkedlist();而其他都不需要变
是不是JAVA哦?如果是的话应该是List
list
=
new
ArrayList
();大小写严格区分的。ArrayList是实现了List接口的一个类,用接口来
实例化
对象,那么对象只能调用从接口里面的方法。