我知道当我初始化一个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哲学的本质之一还是其背后的某些原因?
如果您曾经使用过 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)
Arrays
Array
ArrayLists 有所不同,因为它们就像Java中的大多数事物一样只是日常类,因此您可以通过实际的构造函数调用对其进行初始化:
ArrayLists
List<T> = new ArrayList<T>();
基本上,数组和类只是以不同的方式工作。