初始化java数组vs其他初始化?

时间:2014-09-10 09:16:21

标签: java initialization

我知道当我初始化一个char数组时: 我必须

char[] b= new char[5];

char[] b= new char[5]({1,2,3,4,5});

为什么不喜欢

ArrayList<Charset> list = new ArrayList<Charset>(); 

初始化数组:

char[] b = new char[5](); ?

为什么他们不同?它是java哲学性质还是背后的原因之一?

5 个答案:

答案 0 :(得分:0)

Arrays和ArrayList用于不同的目的。如果你需要一个固定大小的对象集合,那么去数组,但如果你需要动态增长的对象集合,那么去arraylist。在某种程度上,编译器需要知道您的需求,因此语法不同。

答案 1 :(得分:0)

这只是Java的设计。 ArrayListArrays是两回事。不需要相同的声明。

答案 2 :(得分:0)

我想那些创建Java的人希望保持语法接近C语法。在Java中,数组是极简主义的低级对象,所以它们的情况有点特殊。

答案 3 :(得分:0)

ArrayList是一个容器,它类似于C ++中的Vector,它可以添加和删除元素,但是数组不能改变它的大小

答案 4 :(得分:0)

如果你曾经使用 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并不像典型对象那样真正起作用,因此即使创建它们并使用反射操作它们也会使用不同的Array类来操纵对象。 (见http://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html

ArrayLists是不同的,因为它们只是日常的类,就像java中的大多数东西一样,所以你用实际的构造函数调用初始化它们:

List<T> = new ArrayList<T>();

基本上,数组和类只是以不同的方式工作。