目录
今天是七夕节,祝大家有对象的长长久久,没对象的早遇良人。
实在没对象的可以自己new一个,过节嘛,最重要的是开心!
七夕快乐!!!
数组:相同类型元素的集合。在内存中是一片连续的空间
注意:
1.数组中存放的元素类型相同。
2.数组开辟的空间是连在一起的(java中二维数组不一定连续)。
3.每个空间都有自己的编号,其初始位置的编号为0,即为数组的下标
类型[] 数组名= new 类型[数组长度];
- int[] array = new int[10];
- //创建一个数组,可以容纳10个int类型的元素。
在创建数组时,直接指定元素个数。
int[] array = new int[5];
此时创建了一个可以容纳5个int类型元素的数组。
double[] array = new int[]{1.0,2.0,3.0,4.0};
静态初始化也可省去new int[] 简写成:
double[] array = {1.0,2.0,3.0,4.0};
注意:
1.静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
2.静态初始化时, {}中数据类型必须与[]前数据类型一致。
3.简写虽然省去了new T[], 但是编译器编译代码时还是会还原
静态和动态初始化也可以分为俩步,但省略格式不可以。
- int[] array1;//这里并没有开辟空间,只是声明了一个变量名array1。
- array1 = new int[10];
-
- int[] array2;
- array2 = new int[]{10, 20, 30};
- //创建了一个可以容量3个int类型元素的数组,元素的初始值为10,20,30
- int[] array3;
- array3 = {1, 2, 3}
- //这是一种错误的写法。
这里可以这么理解:对于{1,2,3}来说,它只是数组初始化的一种方式,并不表示为数组。而array3是一个数组,他应该指向一个已经初始化了的数组对象。
- int[]array = new int[]{10, 20, 30, 40, 50};
- System.out.println(array[0]);
- System.out.println(array[1]);
- System.out.println(array[2]);
- System.out.println(array[3]);
- System.out.println(array[4]);
- int[]array = new int[]{10, 20, 30, 40, 50};
- array[1] = 90;
- System.out.println(array[1]);
- public static void main(String[] args) {
- int[] array = new int[]{1,2,3,4,5};
- System.out.println(array.length);
- }
通过for循环来打印数组的每一个元素
- public static void main(String[] args) {
- int[] array = new int[]{1,2,3,4,5};
- for (int i = 0; i < array.length; i++) {
- System.out.println(array[i]);
- }
- }
基本数据类型创建的变量称为基本变量,该变量再空间中直接存放的是其所对应的值。
引用数据类型创建的变量,称为对象的引用,该变量在空间中存储的是对象所在空间的地址。
来看一道例题:
public static void func() { int[] array1 = new int[3]; array1[0] = 10; array1[1] = 20; array1[2] = 30; int[] array2 = new int[]{1,2,3,4,5}; array2[0] = 100; array2[1] = 200; array1 = array2; array1[2] = 300; array1[3] = 400; array2[4] = 500; for (int i = 0; i < array2.length; i++) { System.out.println(array2[i]); } }大家可以先思考一下,输出了些啥?
你答对了吗?这里值得注意是是array2[2] 和array2[3]的值是 300和400。
接下来给大家画图
值得注意的是数组里面存的是地址,当把array2数组的地址给array1时, 它们就指向了同一个对象。
- int[] arr = null;
- System.out.println(arr[0]);
- // 执行结果 Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:6)
int[] array = new int[]{1,2,3,4};
把整形数据1,2,3,4存放在数组当中。
- public static void func2(int[] arr){
- arr[0] = 10;
- System.out.println(arr[0]);
- }
- public static void main(String[] args) {
- int[] array = new int[]{1,2,3,4};
- func2(array);
- System.out.println(array[0]);
- }
可以发现在func2内部修改数组内容,方法外部数组内容也会发生改变 。
因为数组是引用类型,按照引用类型进行传递(传递对象的地址),是可以修改其中存放的内容的。
再看一个题:以下代码会输出什么?
public static void func1(int[] arr){ arr = new int[10]; } public static void main(String[] args) { int[] array ={1,2,3,4}; func1(array); System.out.println(Arrays.toString(array));//以字符串的形式输出array数组里面的元素 }答案是{1,2,3,4}
虽然arr数组原本指向的对象是数组array1,但是arr数组又重新开辟了空间,指向了新的空间(对象),所以改变arr数组并不影响array这个数组。
- public static int[] func(int n){
- int[] arr = new int[n];
- for (int i = 0; i < n; i++) {
- arr[i] = i;
- }
- return arr;
- }
- public static void main(String[] args) {
- int[] array = func(10);
- System.out.println(Arrays.toString(array));
- }
- int[][] array = new int[][]{{1,2,3},{4,5,6}};
- int[][] array1 = new int[2][3];
不规则二维数组 :
- int[][] array = new int[2][];
- array[0] = new int[3];
- array[1] = new int[4];