java数组初始化及内存分析

来源:互联网 发布:nginx 取header 编辑:程序博客网 时间:2024/05/18 03:19

数组:相同类型的、用一个标识符名封装到一起是一个对象序列或基本类型数据序列。

一维数组的声明:1 int[ ] a1;    2  int  a1[ ]

两种格式含义一样,第二种符合c和c++程序员的习惯。第一种或许更合理,表明类型是“一个int型数组”。

编译器不允许指定数组的大小。声明数组的时候不能指定其长度(元素的个数)如int a[5]; //非法。初始化的时候可以指定大小。

Java中的数组必先初始化才可以使用,所谓初始化就是为数组的数组元素分配内存,并为每个数组元素赋值;现在只是对数组的一个引用(已经为该引用分配了存储空间),并没有给数组对象本身分配任何空间,初始化才会创建相应的存储空间。

初始化的两种方式
静态初始化:初始化时由我们自己指定每个数组元素的初始值,由系统决定需要的数组长度;
格式:数组名 = new 数组类型[]{元素1,元素2,元素3...元素n};   a1 = new  int{1,2,3,4,5};
简化语法:数组名 = {元素1,元素2,元素3...元素n};                      a1 =  {1,2,3,4,5};
动态初始化:初始化时由我们指定数组的长度,由系统为数组元素分配初始值;
格式:数组名 = new 数组类型[数组长度];                          a1 = new int[ 8];

注意:不能静态和动态初始化同时使用,也就是说不能同时指定数组的长度和元素;数组的长度一旦确定,就不能改变,也就数组是定长的;

所有数组都有一个固有成员,length,通过 数组名.length 可获得数组成员个数。java数组下标是从0开始的,最大下标为数组名.length-1。超出这个边界会出现异常数组脚标越界异常(ArrayIndexOutOfBoundsException)。

内存分析:

示例

public class ArrayInit{    public static void main(String[] args){        int[] a1 ={1,2,3,4,5};        int[] a2;        a2 =a1;        for(int i =0;i<a2.length;i++)             a2[i]=a2[i]+1;        for(int i =0;i<a1.length;i++)              System.out.println("a1["+ i +"] =" + a1[i]);    }}输出:a1[0]=2a1[1]=3a1[2]=4a1[3]=5a1[4]=6


给出了a1的初始值,但a2在后面被赋给a1数组,俩数组指向相同的堆地址,所以a2数组的值改变,a1也跟着改变。

0 0
原创粉丝点击