JAVA数组和内存

本文详细介绍了Java数组的概念、静态和动态初始化方法,强调了数组索引、遍历以及常见问题。此外,还探讨了数组在内存中的存储结构,包括栈与堆的区别,以及内存图示例。
摘要由CSDN通过智能技术生成

目录

数组的概述和静态初始化

介绍

定义

数组的初始化

静态初始化

动态初始化

区别

索引

数组遍历

常见问题

数组练习

求最值

交换数据

打乱数据

数组的内存图!

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

总结


数组的概述和静态初始化

介绍

1、数组是一种容器,用来存放同种数据类型的多个值

2、数组容器在存储数据的时候,需要结合隐式转换考虑

3,例如:int类型的数组容器(boolean  byte short char int double

定义

数据类型 【】数组名

数据类型  数组名【】

数组的初始化

静态初始化

初始化就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

方式:静态初始化:

格式:数据类型【】数组名=new 数据类型【】{元素1,元素2,元素3.....}

例子: double [] array1=new double [] {1.1,23.4,5.6};

简写 double [] array1= {1.1,23.4,5.6};

注意:数组的长度一旦确定就不能再改变数组的大小了

数组地址:数组在内存中的位置

动态初始化

定义:初始化时只指定数组长度,由系统为数组分配数组值。

例子:数据类型【】数组名=new 数据类型 【数组长度】;

int []arr=new int[3];

区别

动态初始化:只明确元素个数,不明确具体数值,

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

索引

把数据存储到数组当中:

一旦覆盖之后,原来的数据就不存在了

数组遍历

数组遍历:将数组中的元素取出来,取出来之后可以(打印。求和。判断)

注意:遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印!

扩展:自动的快速生成数组的遍历方式     idea提供的 数字名.for i

例题

一个循环尽量只做一件事情

常见问题

最小索引:0

最大索引:数组的长度-1

索引越界异常:避免:索引的范围

数组练习

求最值

初始化值必须是数组内的任何一个值

为了提高效率,减少循环比较的次数,可以把循环开始条件写为1

交换数据

打乱数据

数组的内存图!

java内存分配:

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

堆:存储对象或者数组,new来创建的,都存储在堆内存   new创建newnewnewnew,如果简化的数组定义时没有new关键字,那么数组元素也是存放在堆里边的

方法区:存储可以运行的class文件

本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关

寄存器:给CPU使用,和我们开发无关

(见黑马程序员上部62)

例子:int []arr={1,2,3};

int []arr是存放在栈里边的,然后arr对应的是堆里边的地址,多以打印arr时,打印的是地址而不是数字,{1,2,3}是存放在堆里边的,这个数组只是简化了定义,而内存和有无new没有任何变化。

arr[0]=11;则是把11赋给arr[0],改变数组中堆里边的值。

总结:

1、只要是new出来的一定是堆里面开辟了一个小空间

2、如果new了很多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据

3、main方法进栈

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

总结

1、深刻理解数组的内存区的分部和存储

2、理解栈和堆的区别

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值