java引用数据类型-数组

数组的定义

  • 数组用于将相同类型的数据存储在连续的存储单元中;
  • 可以通过指定数组的名称和长度来声明数组;
  • 一旦声明数组的大小,就不能再修改;
  • 数组元素通过数组名和索引来访问,索引从0开始;
  • 数组可以是一维,也可以是多维。


    在java中声明数组有如下方式(以整型数组为例):

    //仅声明数组的引用,但没有分配内存空间
    int[] arr;
    //声明数组的同时,根据指定长度分配内存,但是数组中没有值
    int[] arr= new int[10];
    //声明数组并分配内存,同时将其初始化
    int[] arr2= new int[]{1,2,3,4,5};
    //或者是
    int[] arr2={1,2,3,4,5};

声明数组示例:

    public class ArrayDemo{
        public static void main(String[] args){
        //声明整型数组的引用
        int[] arr;
        //为数组引用在堆中分配内存
        arr = new int[10];
        //使用循环为数组元素赋值
        for(int i=0;i<arr.length;i++){
            arr[i]=i;
        }
        //将数组元素逐个输出到控制台
        System.out.println(Arrays.toString(arr));
        }
    }
关于数组长度
  • 在java中,程序员可以不再关注数组的长度,数组自带的length属性将负责保管数组的长度
  • java对数组下标越界情况强加约束
  • 如果视图访问不在有效索引以内的元素,将会引发运行错误。(异常:数组下标越界)
    比如:
    int[] arr = new int[4];
    System.out.println(arr[4]);

控制台抛出的运行时异常,如下图:
数组下标越界


数组的赋值

  • 在java中,语法上允许数组直接赋值给另一个数组,但实际得到的效果是两个数组引用指向同一块内存。
    int[] arr1 = new int[]{2,4,6,8,10};
    int[] arr2 = arr1;  
    System.out.println("arr1的地址是:"+arr1+"  arr2的地址是:"+arr2);

结果如图:
控制台输出的结果
用图来说明的话,如下:
指向同一内存


数组的复制

1.数组变量存储对数组的引用,复制该变量将产生同一数组的第二个引用。

    //指向的是同一个地址
    int[] a = new int[3];
    int[] b = a;

2.真正复制一个数组需要用到clone方法。

    //指向的是不同的地址
    int[] a = new int[3];
    int[] b = a.clone();

3.使用System.arraycopy()进行数组的复制
方法的参数说明:

    System.arraycopy(from,fromstart,to,tostart,count); 
  • from:源数组
  • fromstart:从源数组的那个位置开始复制,数组下标是从0开始的
  • to:目标数组
  • tostart:目标数组开始的位置
  • count:复制的长度

案例:
将a数组复制到b数组中

    int[] a={1,2,3,4};
    int[] b=new int[3];
    System.arraycopy(a, 0, b, 0, b.length);

定义多维数组

1.比如定义一个在第几行就有几列的多维数组,代码如下:

        //申请一个二维数组,三行,列不确定
        int[][] arr= new int[3][];
        for(int i=0;i<arr.length;i++){
            //定义第一行一列,第二行两列,第三行三列
            arr[i]=new int[i+1];
        }

2.比如定义一个3行4列的多维数组,代码如下:

        //申请一个二维数组,三行,四列
        int[][] arr= new int[3][4];
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                //给第一行第一列赋值11,第一行第二列赋值12,以此类推
                arr[i][j]=(i+1)*10+j+1;
            }
        }
        //循环输出结果
        for(int[] num1:arr){
            for(int num2:num1){
                System.out.print(num2+" ");
            }
            System.out.println();
        }
        /*
        结果如下:
        11 12 13 14 
        21 22 23 24 
        31 32 33 34 
        */
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值