数组详解(java)

目录

数组的基本概念

什么是数组?

数组的创建

数组的初始化

动态初始化:

静态初始化:

数组中元素的默认值。

数组的使用:

数组中元素访问 

遍历数组

 数组是引用类型

基本类型变量与引用类型变量的区别

 引用变量

认识 null

数组的应用场景

保存数据

作为函数的参数

参数传数组类型(引用数据类型)

作为函数的返回值

二维数组


今天是七夕节,祝大家有对象的长长久久,没对象的早遇良人。

实在没对象的可以自己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是一个数组,他应该指向一个已经初始化了的数组对象。

数组中元素的默认值。

如果没有对数组进行初始化,数组中元素有其默认值
如果数组中存储元素类型为基本类型,默认值为基本类型对应的默认值,比如:

数组的使用:

数组中元素访问 

数组在内存中是一段连续的空间,空间的编号都是从 0 开始的,依次递增,该编号称为数组的下标,数组可以通过 下标访问其任意位置的元素
比如:
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]);

遍历数组

在数组中可以通过 数组对象 .length 来获取数组的长度
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时, 它们就指向了同一个对象。

认识 null

null Java 中表示 "空引用" , 也就是一个不指向对象的引用.
int[] arr = null; 
System.out.println(arr[0]); 
// 执行结果 Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:6)
null 的作用类似于 C 语言中的 NULL ( 空指针 ), 都是表示一个无效的内存位置 . 因此不能对这个内存进行任何读写操
. 一旦尝试读写 , 就会抛出 NullPointerException.

数组的应用场景

保存数据

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));
    }

二维数组

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.
基本语法:
1. 数据类型 [][] 数组名称 = new 数据类型 [ ][ ] { 初始化数据 };
2.数据类型 [][] 数组名称 = new 数据类型 [行数 ][列数 ];
3. 数据类型 [][] 数组名称 = new 数据类型 [行数 ][ ];
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];

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值