java数组拷贝

数组的拷贝 分为 2种情况,一种为浅拷贝,即引用传递,第二种为深拷贝,即不单单只是拷贝了引用,同时开辟了一块新的内存空间

一)浅拷贝有三种方式:

//第一种方式利用for循环:
int[] a={1,2,4,6};
int length=a.length;
int[] b=new int[length];
for (int i = 0; i < length; i++) {
b[i]=a[i];
}
//第二种方式直接赋值:
int[] array1={1,2,4,6};
int[] array2=a;

/*这里把array1数组的值复制给array2,如果你这样去运行,就会发现此时两个数组的值是一样的。这是传递的是引用(也就是地址),之后改变其中一个数组另一个也会跟着变化。*/
 
//第三种方式:
利用Arrays自带的copyof
 int copy[] = Arrays.copyOf(a, a.length);

二)一维数组的深拷贝(system.arrayCopy())

/**
        * 数组深拷贝的方法有如下几种:
        * 1。 调用clone
        * 2。 调用System.arraycopy
        * 以上两种对基本类型和对象类型数据效果等同。
        * 3。 使用FOR循环,将数组的每个元素复制。(注意调用clone方法)
        */

举例:

       Object[] src = new Object[]{ new String("Zhao"),
                                        Integer.valueOf(1),
                                        Integer.valueOf(2),
                                        Integer.valueOf(3),
                                        Integer.valueOf(4)};                               
       Object[] dest = src.clone();                //1.拷贝数据       
        // Object[] dest = new Object[5];
        // System.arraycopy(src, 0, dest, 0, dest.length);       
        System.out.println( dest.equals(src));
       System.out.println( dest == src );
       for (int i = 0; i < dest.length; i++) {
           System.out.print( dest[i]+", " );     
           dest[i] = new String("KE");               //2.改变新数组内容                  
            System.out.print( dest[i]+", " );        
            System.out.println( src[i]+",");          //3.不影响原始数组
        }
       System.out.println();

注意: 一维数组下的深拷贝在 多维数组 只是浅拷贝!!

时间: 2024-10-31 13:13:33

java数组拷贝的相关文章

java数组拷贝的方法

//数组拷贝的方法:System.arraycopy()  /* 查看源代码文件中的System类的arraycopy方法: 这是我的安装目录:D:\OpenSourceSoftware\Java\jdk1.7.0_80\src\java\lang\System.java System.java文件中的arraycopy方法代码如下: public static native void arraycopy(Object src,  int  srcPos,                    

java数组-----拷贝、掺入、删除元素

package cn.zxg.arrays2; /** * 测试数组的拷贝 */public class TestArrayCopy { public static void main(String[] args) { TestBaseCopy(); TestBaseCopy2(); String [] str={"阿里","京东","百度","亚马逊"}; removeElment(str,1); } //数组的拷贝 pub

java杂记——数组拷贝

这里介绍两种java提供的数组拷贝方法: (1)Arrays提供的copyOf(T src, T desLength)和copyOfRange(T src, int from, int to) (2)System.arraycopy(T src, int from, T des, int from, int length) 使用例子: (1) int [] a = {1,2,3,4,5,6}; int [] b = Arrays.copyOf(a, 8); //把a拷贝到长度为8的b中.b的长度

Java基础知识强化86:System类之arraycopy()方法(数组拷贝)

1. arraycopy方法(数组拷贝) 1 public static void arraycopy(object src,int srcPos,Object dest,int destPos, int length) 从指定的数组中复制一个数组,复制从指定位置开始,到目标数组的指定位置结束. 参数:        src - 源数组        srcPos - 源数组中的起始位置        dest - 目的数组        destPos - 目标数据中的起始位置        

java 数组操作方法

数组操作方法: 实现数组拷贝: 语法:System.arraycopy(源数组名称,源数组拷贝开始索引,目标数组名称,目标数组拷贝数组索引,长度) 数组A:1 . 2 . 3 . 4 . 5 . 6 . 7 . 8  : 数组B:11 . 22 . 33 . 44 . 55 . 66 . 77 . 88  : 目标数组:11 . 22 . 4 . 5 .6 . 66 . 77 . 88 : 1 public class demo { 2 public static void main(Strin

七、java数组

目录 一.一维数组 声明方式 数组对象的创建 元素为引用数据类型的数组 数组初始化 数组元素默认初始化 数组元素的引用 二.二维数组 概念 初始化 二维数组举例 三.数组的拷贝 四.练习 数组可以堪称是多个相同类型数据组合,对这些数据的统一管理 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量 数组中的元素可以是任何数据类型,包括基本类型和引用类型 一.一维数组 1.声明方式: type var [ ] ; 或 type [ ] var ; 例如: int a1

Java - 数组解析

java提高篇(十八)-----数组之一:认识JAVA数组 一.什么是数组 数组?什么是数组?在我印象中的数组是应该这样的:通过new关键字创建并组装他们,通过使用整形索引值访问它的元素,并且它的尺寸是不可变的! 但是这只是数组的最表面的东西!深一点?就是这样:数组是一个简单的复合数据类型,它是一系列有序数据的集合,它当中的每一个数据都具有相同的数据类型,我们通过数组名加上一个不会越界下标值来唯一确定数组中的元素. 还有更深的,那就是数组是一个特殊的对象!!(对于这个LZ理解的不是很好,对JVM

java数组学习笔记

发现自己基础知识学的不够扎实,慢慢回顾下! 数组创建: 方式一:type[] 变量名 = new type[元素个数];  ——如:int[] a = new int[10]; 方式二:type 变量名[] = new type[元素个数];  ——如:int a[] = nwe int[10]; 方式三:type[] a= new type[]{初始化值,逗号分隔} ——如:int[] a=new int[]{1,2,3} 初始化时,不能同时定义维和初始化值  ——例如 :int[] a=ne

基础知识——Java数组和集合

数组 ? ? Java中的数组是一个类 ? ? Java中数组作为一个特殊的类,也是不同于C++的一点表现,既然Java中的数组是一个类,那么字符串数组和整型数组的类名是一样的吗?答案是否定的,整型数组的类名是[I,而字符串数组的类名是[Ljava.lang.String. ? ? 存储数组中的元素 ? ? 另外Java中数组操作基本数据类型和引用类型的方式各不相同,在处理基本数据类型的时候,数组保存的是变量的值,未指定时是0,在处理引用类型时,数组保存的是对象的引用,未指定时是null ? ?