Day5循环高级、数组

文章详细介绍了Java中数组的初始化,包括静态和动态两种方式,并解释了数组在内存中以地址值形式存在的情况。同时,文章阐述了Java内存的栈、堆、方法区(元空间)等区域的作用,特别是数组在堆和栈中的存储机制,并通过示例说明了两个数组指向同一内存空间时的特殊情况。
摘要由CSDN通过智能技术生成

一、数组初始化

1.静态初始化

(1)完整格式:

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};

(2)简写格式:

数据类型[] 数组名 = {元素1,元素2,元素3,元素4...};

(3)地址值

打印数组的时候,实际出现的是数组的地址值。

int[] arr = {1,2,3,4,5};
System.out.println(arr);//地址值:[I@6d03e736

(4)扩展

以[I@6d03e736为例:

[ :表示现在打印的是一个数组。

I:表示现在打印的数组是int类型的。

@:仅仅是一个间隔符号而已。
6d03e736:就是数组在内存中真正的地址值。(十六进制的)

(5)数组的长度属性

调用方式:数组名.length

快速生成数组的遍历方式

仅由idea提供------>数组名.fori

2.动态初始化

(1)初始化

初始化时只指定数组长度,有系统为数组分配初始值

(2)格式

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

(3)数组的默认初始化值:

整数类型:0

小数类型:0.0

布尔类型:false

字符类型:‘\u0000’

引用类型:null

3.二维数组

(1)静态初始化

简化:数据类型[][] 数组名 = {{…},{…}};

(2)动态初始化

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

(3)内存分配

与一维数组一样,用到栈内存和堆内存

可以分解成,先创建一维数组,一维数组作为元素再创建数组,此时成功创建二维数组

二、Java内存分配

1.栈

(1)作用

方法运行时使用的内存,比如main方法运行,进入方法栈中执行

(2)变量

定义一个变量,使用栈内存

2.堆

(1)作用

存储对象或数组,new来创建的(在堆里开辟地址空间),都存储在堆内存

(2)数组存储

用到栈内存和堆内存,栈内存存储的是在堆里开辟的地址空间的地址,堆内存里存储数组的具体内容,包括元素,数组长度等

(3)数组存储的特殊情况

两个数组指向同一个空间的内存

public static void main(String[] args){
    int[] arr1 = {11,22};//在堆里面开辟地址空间,且存入数据
    int[] arr2 = arr1;//表示arr1中的内容赋值给arr2,arr1和arr2指向同一个堆内存的地址空间
    
    sout(arr1[0]);//11
    sout(arr2[0]);//11
    
    arr2[0] = 33;//33赋值给arr2[0]的地址空间
    
    sout(arr1[0]);//33
    sout(arr2[0]);//33
}

两个数组指向同一个空间的内存,当一个数组对地址空间中的值进行修改,那么其他数组再访问时,获取的数据则是修改后的数据

3.方法区(元空间)

JDK8开始,取消方法区,新增元空间。把原来方法区的多种功能进行拆分,有的功能放到了堆中,有的功能放到了元空间中

作用

存储可以运行的class文件

4.本地方法栈

作用

JVM在使用操作系统功能的时候使用,和开发者无关

5.寄存器

作用

给CPU使用,和开发者无关

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Heliotrope&G

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

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

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

打赏作者

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

抵扣说明:

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

余额充值