初始化java数组vs其他初始化?
我知道当我初始化一个char数组时:我必须这样做
char[] b= new char[5];
要么
char[] b= new char[5]({1,2,3,4,5});
为什么不喜欢
ArrayList list = new ArrayList();
初始化数组:
char[] b = new char[5](); ?
为什么他们不同? 它是java哲学性质还是背后的一些原因?
如果您曾经使用过C ,那么答案就相当简单。 在C中 ,创建数组的方法是在堆栈上分配一个足够大的内存,以包含元素的数量,并指向第一个带有指针的元素 – 或者堆上的动态内存长度,以及指向带指针的第一个元素。
int a[5]; //stack, static allocation int* a = (int*)malloc(sizeof(int)*5)); //heap, dynamic allocation
在C ++中 ,第二个版本更改为此,显然是因为更明显的是发生了什么:
int* a = new int[5];
他们将这种类型的数组创建转移到Java上 。
int[] a = new int[5];
Arrays
并不像典型的对象那样真正起作用,因此即使创建它们并使用reflection操作它们也会使用不同的Array
类来操作对象。 (参见http://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html )
ArrayLists
是不同的,因为它们只是日常类,就像java中的大多数东西一样,所以你用实际的构造函数调用初始化它们:
List = new ArrayList ();
基本上,数组和类只是以不同的方式工作。
这只是Java
设计。 ArrayList
和Arrays
是两回事。 不需要相同的声明。
我想创建Java的人希望保持语法接近C语法。 在Java中,数组是极简主义的低级对象,因此它们的情况有点特殊。
ArrayList是一个容器,它类似于C ++中的Vector,它可以添加和删除元素,但是数组不能改变它的大小
数组和ArrayList用于不同的目的。 如果你需要一个固定大小的对象集合,那么去数组,但如果你需要动态增长的对象集合,那么去arraylist。 在某种程度上,编译器需要知道您的需求,因此语法是不同的。