day04 数组
数组是一种引用数据类型
数组的父类是object。数组变量可以调用object的方法。
int[] arr = new int[]{0,1,2,3};
Object o = arr; //子类型变量可以赋值给父类型变量
int[] arr1 =(int[]) o; //强转
System.out.println(arr1[2]); //2
Integer[] arr = new Integer[]{1,2,3};
// int[] iarr = arr;//报错
Number[] narr = arr;//不报错
Object[] oarr = arr;//不报错
Object o = arr;//不报错
Integer[] arr2 = (Integer[]) oarr;
Integer[] arr3 = (Integer[]) o;
System.out.println(arr2[0]);//正常输出
System.out.println(arr3[0]);//正常输出
什么是协变?
协变(Covariant)指的是:
如果类型
B是类型A的子类,那么B[]也被认为是A[]的子类
- 在 Java 中,数组是协变(covariant)的。
class Animal {}
class Dog extends Animal {}
public class Main {
public static void main(String[] args) {
Dog[] dogs = new Dog[10];
Animal[] animals = dogs; // 合法!数组是协变的
animals[0] = new Dog(); // 合法
animals[1] = new Animal(); // 运行时抛出异常!
}
}
- Java 的泛型 不是协变的(默认情况下):
List<Dog> dogs = new ArrayList<>();
List<Animal> animals = dogs; // 编译错误!
Java 提供了通配符(如 <? extends Animal>)来显式表示协变。
静态初始化数组

简化格式只能在声明变量的同时进行初始化可以使用。如果是String[] s; s = {"aa","bb"};不可以。

如果是给方法传参数:


数组的遍历
遍历:就是一个一个数据的访问(可以是打印该元素,修改该元素,或者其他操作)。
(打印数组元素是通过遍历数组实现的)

动态初始化数组


注意:是数组里存储的元素的默认值
数组在计算机中的执行原理


多个变量指向同一个数组的问题

随机排名案例
随机打乱数组的思路:从前往后遍历数组,每遍历到一个位置,先通过random获取一个随机位置,再将该位置的数据与随机得到的位置上的数据交换。
1506

被折叠的 条评论
为什么被折叠?



