08-数组

数组介绍

数组可以存放多个同一类型的数据。

数组也是一种数据类型,是引用数据类型。即:数组就是一组数据。

在Java中,数组要求所有数组元素具有相同的数据类型。在一个数组中,数组元素类型是唯一的,只能储存同一种数据类型,不能出现多种数据类型。

数组的声明和创建

首先必须声明数组变量,才能在程序中使用数组

数组定义格式:

a) 数据类型[ ] 数组名; 例如 int[] array; //首选的方法

b) 数据类型 数组名[ ]; 例如 int array[]; //不是首选的方法,但效果相同

数组的引用(使用/访问/获取数组元素)

数组元素是通过索引访问的,编号从0开始

数组访问格式:

数组名 [索引]; 例如 a数组的第三个元素  a[2]

扩展:可以通过 数组名.length 方法, 得到数组的大小/长度

数组的初始化(动态初始化和静态初始化)

a) 动态初始化:

手动指定数组长度,由系统给出默认初始化值。

格式:数据类型[ ] 数组名 = new 数据类型[数组长度];

b) 静态初始化:

手动指定数组元素,系统会根据元素个数,计算出数组的长度。

完整格式为:数据类型[ ] 数组名 = new 数据类型[ ]{元素1,元素2,元素3…};

简化格式为:数据类型[ ] 数组名 = {元素1,元素2,元素3…};

import java.util.Scanner;

public class Array02{
    public static void main(String[] args){

        //1.动态初始化:手动指定数组长度,由系统给出默认初始化值
        //例如,键盘录入5个学生成绩,保存到 double数组 ,并输出

        //动态初始化,创建一个 double 数组,大小为5
        double[] scores = new double[5];

        //循环输入
        Scanner sc = new Scanner(System.in);
        for(int i = 0; i < scores.length; i++){
            System.out.println("请输入第" + (i+1) + "个学生的成绩:");
            scores[i] = sc.nextDouble();
        }

        //输出,遍历数组
        System.out.println("===数组的元素/值的情况如下:===");
        for(int i = 0; i < scores.length; i++){
            System.out.println("第" + (i+1) + "个学生的成绩:" + scores[i]);
        }

        //2.静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度
        //例如,已知班级学生成绩为100、90、80、60、55,保存到 double数组,并输出

        //静态初始化,创建一个 int 数组
        double[] scores2 = {100,90,80,60,55};

        System.out.println("===数组的元素/值的情况如下:===");
        //输出,遍历输出
        for(int i = 0; i < scores2.length; i++){
            System.out.println("第" + (i+1) + "个学生的成绩:" + scores2[i]);
        }
    }
}

数组内存图

Java内存主要分为堆、栈、方法区。

堆:存放 new 的对象和数组。堆可以被所有的线程共享,不会存放别的对象引用。

栈:存放基本数据类型(基本类型的具体数值)和引用数据类型(在堆里面的具体地址);方法运行时所进入的内存。

方法区:字节码文件加载时进入的内存;方法区可以被所有的线程共享;方法区包含了所有的 class 和 static 变量。

 

数组赋值机制(方法参数传递)

1. 对于基本数据类型,传递的是数据值(值传递)

2. 对于引用数据类型,传递的是地址值(引用传递)

这里需要注意:基本数据类型,传递的是具体的数据,相互之间不影响。而数组在默认情况下是引用传递,如果堆内存中的数组已经被修改了,则相应的也会发生修改

public class ArrayTest{
    public static void main(String[] args){
        //1. 基本类型赋值,传递的是数据值
        //n2的变化不会影响n1的值
        int n1 = 10;
        int n2 = n1;

        n2 = 20;
        System.out.println("n1 = " + n1); //n1 = 10;
        System.out.println("n2 = " + n2); //n2 = 20;

        //2. 引用类型赋值,传递的是地址
        //arr2的变化会影响到arr1
        int[] arr1 = {10,20,30};
        int[] arr2 = arr1;

        arr2[0] = 100;
        System.out.println("arr1[0] = " + arr1[0]); //arr1[0] = 100
        System.out.println("arr2[0] = " + arr2[0]); //arr2[0] = 100
    }
}

 

posted @ 2023-07-18 23:27  马铃薯1  阅读(22)  评论(0编辑  收藏  举报