初识数组,内存组织

初识数组,内存组织-----《java课堂随笔3》

一、数组

1.为什么要有数组?

所有学生的学号 
String stuId1
String stuId2
String stuId3
String stuId4

在有大量相同类型元素需要处理的情况下引入数组的概念{或者使用集合(List、Set、Map)、留待后文详解,此处只谈数组}

2.数组的概念

数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器
1)数组既可以存放基本数据类型元素,也可以存放引用数据类型元素
2)数组本身是引用数据类型
3)初始化之后长度不可改变,下图解释了为何长度不可改变
int a = 1;
int b = 100;
int[] arr = new int[2];
arr = new int [3];
arr = null;
/* 对以上代码在RAM 中的组织形式解释如下所示
* a、b都是基本数据类型,java在存储时把基本数据类型的变量存贮在栈中,如图。
* arr  初始化时指向了一个长度为二的int型数组,arr为该数组的引用,存储在栈中。
* 而真正的数组存储在堆中,栈中的arr只是存储了数组第一个元素的首地址。
* 我们称arr为引用,(此处可类比C中的指针理解)。
* 第三行代码建立一个二元素数组,并把首地址0x0010存入arr中。
* 第四行代码建立一个三元素组并把0x0010改写成0x0080,断开arr与二元素数组的联系,建立起与三元素数组的链接。
* 第五行代码将arr的值置空,断开与三元素数组的链接。
*/

注:通过以上过程我们不难发现,“初始化后长度不可改变”,完全正确。因为改变的只是引用,堆中的数组本身没有发生任何变化,未被引用的数组占用内存在一定的时间过后会被java的垃圾回收机制回收(GC)。

数组长度不可改变

3.数组的定义

数据类型[]  数组名;
数据类型  数组名[];

4.数组的初始化

1)静态初始化
//初始化时指定每个数组元素的初始值,由系统决定数组长度
int[] arr = new int[] {1, 2, 3};
int[] arr = {1, 2, 3};
2)动态初始化
//初始化时只指定数组长度,由系统为数组分配初始值
int[] arr = new int[5];
/*动态初始化,系统为每个元素指定初始值
 *基本数据类型的初始值
 *|-byte 	0
 *|-short 	0
 *|-int	    0
 *|-long  	0
 *|-double  0.0
 *|-float	 0.0
 *|-boolean false
 *|-char 	 0
 *引用数据类型----null
 *	|-String null
 */
3)数组的长度
//数组名.length;
int arr[] = new int[5];
Ststem.out.println(arr.length);
//输出数组arr的长度
4)访问数组中的元素
	数组名[下标]
	下标的范围 0  ~  数组的长度-1

5.常见问题

ArrayIndexOutOfBoundsException--下标越界异常
NullPointerException--空指针异常

6.数组常见操作

1)遍历---for循环,增强for循环遍历数组,下一篇详解
2)求最值---遍历交换
3)逆序---遍历,两个控制变量实现前后交换

7.数组一旦初始化,长度不可改变

栈----
	|----基本数据类型变量
	|----引用---生成对象时,赋值左侧的内容
堆----
	|----对象,数组---通过new生成的区域
详细解释已在数组的概念中详述,不再赘述

如有错误,欢迎指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值