Java中关于对数组的赋值和复制的区别与理解

Java中关于对数组的赋值和复制的区别与理解

①数组的赋值

package com.haha.bean;
/*
* 使用简单数组
* (1)创建一个名为Assignment的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组
* (2)使用{},把array1初始化为8个素数:2,3,5,7,11,13,17,19
* (3)显示array1的内容
* (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0] = 0,array[2] = 2),打印出array1
*
*   思考:array1和array2是什么关系?
*        由以下代码可知,把array1赋值给array2之后,而后修改了array2的值,发现array1也改变了,
*        由此可见,赋值操作并不是对值的赋值,而是对地址的赋值,由以前对数组的理解也可知,也是对数组地址的赋值
*        在堆空间中,栈中的数组指向了堆的同一个空间,着也相当于对一个文件的创建快捷方式,把快捷方式里的内容删去,
*        原文件里的内容也会被删除,因为这时同一个地址(详见  宋  p162)
*   拓展:修改题目,实现array2对array1数组的复制
* */
public class Assignment {
    public static void main(String[] args) {
        int[] array1,array2;                 //注意这里是如何定义数组的
        array1 = new int[]{2,3,5,7,11,13,17,19};
        for(int i=0;i<array1.length;i++){
            System.out.print(array1[i]+" ");
        }
        System.out.println();
        array2 = array1;                  //这里是数组的赋值,由于数组名表示地址值
        for(int i=0;i<array2.length;i++){
            if(i%2==0){
                array2[i]=i;
            }
        }
        for(int i=0;i<array1.length;i++){
            System.out.print(array2[i]+" ");
        }
    }
}

②数组的复制

package com.xxx.bean;
/*
* 此代码实现了对数组的复制
* */
public class Copy {
    public static void main(String[] args) {
        int[] arr1, arr2;                       //千万别把两者合在一块写,那样是错误的写法
        arr1 = new int[]{1, 2, 3, 4, 5, 6};  //数组元素的静态初始化
        arr2 = new int[arr1.length];      //数组元素的动态初始化
        for(int i=0;i<arr1.length;i++){
            arr2[i] = arr1[i];
        }
        for(int i=0;i<arr2.length;i++){
            System.out.print(arr2[i]+" ");
        }
        System.out.println();
        for(int i=0;i<arr2.length;i++){
            if(i%2==0){
                arr2[i] = i;
            }
        }
        //由此处可以发现,数组复制产生的另一个数组的改变,并不会影响被复制的数组,原因就是此时开辟了两个空间
        //这段代码new了两次,而另一个对数组赋值的操作中,只new了一次
        for(int i=0;i<arr1.length;i++){
            System.out.print(arr1[i]+" ");
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值