JAVA和C++中数组的区别

JAVA和C++中数组的区别 1. 数组名区别

  1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是java.util.Arrays.详见Java数组方法的思考(数组的类名由若干个’[‘和数组元素类型的内部名称组成,’[‘的数目代表了数组的维度)
  2. 而在c++中数组名其实是一种数据结构,有人会说不是指针吗,关于这一点见(C++中数组名其实是一种数据结构)。
从上面两点中我们可以看出java数组名是对象,而c++数组名是数据结构。那么有人又会问对象和数据结构又有什么区别呢?详见数据结构与对象的区别。
2. 原理区别 JAVA里数组的内存分配是在堆里面的,必须用new来分配,而C++里面是在栈里面分配的,定义的时候会自动分配。
  1. 数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。数组声明的两种形式:一、int[] arr; 二、int arr[]; 推荐使用前者,这是一个int数组对象,而不是一个int原始类型。
  2. 数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的
  3. 在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。因为,声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关
  4. 在数组构造的时候必须指定长度,因为JVM要知道需要在堆上分配多少空间。例:int[] arr = new int[5];
  5. 对象类型的数组虽然被默认初始化了,但是并没有调用其构造函数。(C++中则会调用)也就是说:Car[] myCar = new Car[10]; 只创建了一个myCar数组对象!并没有创建Car对象的任何实例!
3.其他区别 【JAVA和C++中数组的区别】具体的可以见Java/C++中数组的区别

    推荐阅读