【自学Java】Java语言数组

Java语言数组

Java语言数组教程

Java 语言 的数组是一个由固定长度的特定类型元素组成的集合。它们的数据类型必须相同,声明变量的时候,必须要指定参数类型。

Java语言数组定义

语法

数据类型 数组名[] = null; //声明一个一维数组
数组名 = new 数据类型[长度];//给数组分配内存

参数

参数描述
数据类型数据类型是指定数组里面的数据元素的类型,每个元素都要和这个类型一样。
常见类型有:整形,浮点型和字符型。
数组名用来统一的表现这一组数据的元素的名称
长度表示数组可以存放多少个元素,也告诉编译器,内存需要分配多少的内存空间给该数组

说明

数组的定义分为两步,第一步是声明一个数组,第二步是分配内存。我们可以看到第一步在声明数组的时候,给它赋值 null。这是因为数组和我们前面讲到的数据类型不一样,它是一个引用类型数据,用 null 表示不指向任何内存空间。

虽然我们在语法里面分为两句写,在平时项目实践中,我们会看到

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

这样的定义方式。它的长度是固定的,数据类型是一样的。

案例

package com.haicoder.net.array;

public class ArrayTest {
    public static void main(String[] args) {
        int[] scores = null; //定义一个数组
        scores = new int[3]; //为每个数组分配内存空间
    }
}

我们定义了一个数组,我们可以理解的场景为,它是存放 3 个成绩。

小结

这节我们看到和定义一般的普通变量不一样,定义一个数组还需要给数组分配内存,需要知道我们有多少数据,这样才能够合理的设计数组,不会浪费内存空间。


Java语言数组结构

Java语言数组结构教程

Java 语言 中,虚拟机的内存空间分为堆内存空间和栈内存空间。Java 的数组就需要用到这两个空间,我们定义的数组的名字,它是保存在 Java 栈上面,然后记录的数据指向堆里面具体数据的地址。

Java语言数组结构详解

堆栈内存解释

数组的操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间的数组是永远没有办法被使用的,必须有指向的堆堆内存数组才可以被使用,要开辟新的堆内存,需要使用 new 关键字。然后就可以将此堆堆使用权交给栈。一个堆内存空间可以被多个栈内存空间同时指向。

生活中的场景就是一个人,它可以有多个名字,而名字我们可以理解为栈,而人就相当于一个堆。

请添加图片描述

数组堆栈

我们以一个代码为例子:

package com.haicoder.net.array;

public class ArrayTest {
    public static void main(String[] args) {
        int[] scores = null; //定义一个数组
        scores = new int[3]; //为每个数组分配内存空间
    }
}

具体的内存分配图如下:

请添加图片描述

我们可以看到,scores 这个名词指向了堆里面的一块内存空间,它被分了三个连续的空间,里面的值都是 0 ,因为我们定义了 int 类型的数组,并且给它分配了空间,而 int 类型的默认值是 0 ,所以我们刚初始化的时候,数组就是这样的分配模型。

在后面对数组进行操作的时候,其实是对堆里面的数据进行操作。

Java语言数组总结

和普通类型不一样,数组类型是引用类型,它的名字存放在栈中,具体的数据,存放在堆中。

因为堆是可以被栈里面多个名字指向的,所以我们在实际工作中如果发现自己的数组值不是自己期望的数据,可以看下是不是被别的地方引用给修改了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值