数组中的奇怪之处?

开头我想提出几个问题:

  1. 数组中的元素可以放数组嘛?
  2. 数组中可以放引用类型嘛?
  3. 接口,类都是引用类型,请问他们怎么放在数组中,放的具体又是什么?
  4. “数组就是对象”请问我们怎么理解这句话?
  5. 数组如果是对象,那她的类是谁,有没有父类?
  6. 我们可以不遍历得到数组中的有效元素个数嘛?
  7. 高维数组有限制嘛?可以是10000维嘛?最多是多少?

一,数组中可以放引用类型

  1. image-20220522203343752
  2. 既然数组中可以放同一数据类型的引用类型,那是不是可以直接把类放到数组中呢?哎对了,一定程度上这是可以的。但是类是是抽象的没有实体,根据 同一个类实例化的对象就可以放在数组中。
  3. 数组它本身不也是引用类型嘛?所以数组元素也可以放数组,是不是打开了新世界的大门了?对这个叫高维数组。见得最多的就是二维数组。哈哈哈。其实数组数据就是对象(Object)

二,数组就是对象

  1. 在 Java 数组就是对象

    证据:Object obj = new int[10];

    这是个很特殊的现象。你看数组是怎么产生的new 数据类型[]而对象呢?new 类名()。是不是有着异曲同工的蛛丝马迹。

  2. 数组的父类就是 Object,数组不是由某个类实例化过来的,而是直接由 JVM 指令创建的,这个直接创建对象的父类就是Object,所以数组可以调用Object中的所有方法,这也是论证依据。

  3. 数组不仅自己是对象,也是对象集合。它里面的元素不是可以是任何数据类型嘛?那引用数据类型也是数据类型,类就是一种引用类型,故数组中可以放类。但类是抽象的,所以只能放类的实例化的东西,什么?由类构成的对象!

  4. 其实数组刚诞生的时候就是 Object 的对象,他里面元素就是一个个的 Object ,是null。然后在指定了数据类型后,每个元素的初始值才变成了对应数据类型的初始值。比如制定了 new int[],开始元素都是null后来全是0,再然后才是你给初始化的那些数字。而且数组名里面的值还只是那些数字的地址,它从始至终都只是在引用罢了,这是不是和对象是很像的?

  5. 还有就是=。这个在基础数据类型是将值赋值给变量,但是到了引用类型是什么?是将一个对象给变量名参考引用,也就是说数组中=是引用是地址!比如你想完整拷贝一个数组,你直接 数组1 = 数组2行吗?是行不通的。要怎么办?要一个个拷,哪怕是System.arraycopy 原理还是一个个拷。所以如果你直接把一个数组同时=给A,B。如果 A 自己改了数组元素,他不仅会直接影响原数组,还会让 B 也跟着改变。

  6. 还有就是数组能直接知道里面有效元素的个数嘛?比如我这个数组容量是 100 ,其实里面只放了 10 个。除了在一个个统计一次是没办法直接得出的。.length获得的是数组的容量,不是元素个数。那.sizeof呢?这个对集合可以,但是数组没有。这是不是很奇怪。

  7. 还有数组最多只能是 255 维,是不是又看到了 C 的影子。