JAVA数组讲解(一维)

1.数组的创建规范

如图数组大约有以上创建方法,arr3是错误示范,即如果[]内定义了长度就不要自己初始化,想自己初始化就不要在[]内定义长度

2.数组是引用类型

什么是引用类型?你可以理解为这个变量中存储的是地址,还不明白没关系,继续看

2.1JVM对内存的划分

看Java虚拟机运行时的数据图

 今天我们主要讨论虚拟机栈

1.首先我们要知道,局部变量是存储在栈里面的

2.而堆一般用来存储对象


2.2基本数据类型和引用数据类型的区别

1.基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

2.而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址

2.3下面十分十分非常关键!!!

如图jvm在栈上创建了数组arr,在堆上创建了对象1,2,3,4而栈上的arr又存放了能找到堆上对象的“地址”

所以就形成了arr这个引用  指向了  数组对象

引用指向对象

java还有个非常方便的地方就是,当main方法执行完,在栈上为arr开辟的空间被自动回收,堆上的对象就没有人再指向他了,于是也被自动回收,就没了

下面我们来看一个例子

 这会发生什么呢

 如图arr把他对象的地址给了arr2使得arr2也指向了那个对象就形成了两个引用来指向一个对象的局面(所以别泄露对象信息,不然会被其他人盯上

因为他们指向了同一块空间,所以通过一个引用修改,另一个也会变化

下面我们再来看一个例子巩固

 

 结果

为什么会出现这样的结果,大佬们可以根据之前的知识自己做做

提一下,当func方法执行完毕,因为array1和array2是局部变量,会被回收 

3.认识null(空)

int [] arr  = null;

代表这个引用不指向任何的对象

如果他是空的我们还非要去用就会报异常



 4.数组的应用场景

4.1作为函数的参数

例子

 为什么会出现这种情况呢?

经过func为什么没有改变呢,因为形参arr进行new int[10] 操作后,只是把里面存的实参arr的地址,改成了新创建对象的地址,所以并没有对实参进行改变

总结 : 所谓的 " 引用 " 本质上只是存了一个地址 . Java 将数组设定成引用类型 , 这样的话后续进行数组参数传参 , 其实
只是将数组的地址传入到函数形参中 . 这样可以避免对整个数组的拷贝 ( 数组可能比较长 , 那么拷贝开销就会很大 ).
4.2作为函数的返回值
在c语言中,函数是不能直接返回数组的,但是java却可以

 如

5.数组练习

1.借助工具类将数组转化为字符串

 2.借助工具类copy

copy长度*2相当于copy加扩容 

copy局部 

用强大的arraycopy把arr复制到copy

 完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值