java引用数据类型-数组

来源:互联网 发布:linux下jdk怎么卸载 编辑:程序博客网 时间:2024/06/06 01:16

数组的定义

  • 数组用于将相同类型的数据存储在连续的存储单元中;
  • 可以通过指定数组的名称和长度来声明数组;
  • 一旦声明数组的大小,就不能再修改;
  • 数组元素通过数组名和索引来访问,索引从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 0
原创粉丝点击