1、将一个基本数据类型数组的引用赋值给另一个数组

 public class Array_copy {
int[] array1=new int[]{1,2,3,4,5,6};
int[] array2=array1;//将array1的引用赋值给array2,两数组指向同一个内存空间
public static void main(String args[]){
Array_copy ac = new Array_copy();
for (int i=0;i<ac.array1.length;i++){
System.out.print(ac.array1[i]+" ");
}
System.out.println();
for (int i=0;i<ac.array1.length;i++){
System.out.print(ac.array2[i]+" ");
}
System.out.println("\n"+"修改数组array1的值,查看array2是否改变");
ac.array1[0]=10;//修改数组第一元素
for (int i=0;i<ac.array1.length;i++){
System.out.print(ac.array1[i]+" ");
}
System.out.println();
for (int i=0;i<ac.array1.length;i++){
System.out.print(ac.array2[i]+" ");
}
}
}

这里只是复制了数组的引用,一个数组的改变会影响到另一个数组。

2、使用arraycopy方法复制基本数据类型数组

2.1. arraycopy方法声明

public static native void arraycopy(Object src,int srcPos,Object dest,int destPos,int lenhgth);

2.2. arraycopy方法参数简介

src:源数组

srcPos:开始复制的位置,从源数组哪个位置开始复制

dest:目的数组

descPos:将源数组复制到目标数组的起始位置

length:复制多少个源数组中的元素个数

2.2. arraycopy方法演示

 public class Arraycopy {
int[] ary1 = new int[]{1, 2, 3, 4, 5, 6};
int[] ary2 = new int[6];
public void print(int[] array) {
for (int i : array)
System.out.print(i+" ");
System.out.println();
}
/**
* 使用arraycopy方法将数组ary1复制给ary2
* @param args
*/
public static void main(String[] args) {
Arraycopy ac = new Arraycopy();
System.out.println("---两数组初始---");
ac.print(ac.ary1);
ac.print(ac.ary2);
System.out.println("---将ary1复制给ary2---");
System.arraycopy(ac.ary1,0,ac.ary2,0,ac.ary1.length);
ac.print(ac.ary1);
ac.print(ac.ary2);
System.out.println("---修改ary1(ary2)查看ary2(ary1)是否变化---");
ac.ary1[0]=0;
ac.print(ac.ary1);
ac.print(ac.ary2);
}
}

使用arraycopy方法进行数组复制,就不存在数组的引用,即:一个数组的内容的改变不会影响另一个数组的内容。

3、对象类型(引用类型)数组的复制

 import java.awt.*;

 public class Arraycopy2 {
/**
* 定义对象数组
*/
Label lb1[] = new Label[]{
new Label("Label1"),
new Label("Label2"),
new Label("Label3")
};
Label lb2[] = new Label[lb1.length]; public static void main(String args[]) {
Arraycopy2 ac = new Arraycopy2();
System.out.println("--将对象数组lb1复制给lb2--");
System.out.print("lb1数组:");
ac.print(ac.lb1);
//ac.lb2 = ac.lb1;
System.arraycopy(ac.lb1,0,ac.lb2,0,ac.lb1.length);
System.out.print("lb2数组:");
ac.print(ac.lb2);
System.out.println("\n--修改lb1(lb2)查看lb2(lb1)是否变化--");
ac.lb1[0].setText("Label0");
System.out.print("lb1数组:");
ac.print(ac.lb1);
System.out.print("lb2数组:");
ac.print(ac.lb2);//修改lb1数组内容后发现lb2数组也发生改变,说明lb1和lb2指向同一内存空间。
//当然修改lb2内容lb1内容也会改变,这里不赘述了
} public void print(Label[] lb) {
for (Label i : lb) {
System.out.print(i.getText() + " ");
}
System.out.println();
}
}

和基本类型数组是不同的,当数组类型为对象类型时,用arraycopy方法复制数组复制的也只是引用,不是对象本身。

关联博客(CSDN):https://blog.csdn.net/m0_38022608/article/details/80262416

Java数组的复制全解的更多相关文章

  1. java 数组的复制

    java数组的复制分为数组地址的复制和值的复制 地址的复制: int []arrA={11,22,33,44}; //创建一个数组 int [] arrB=new int[5]; System.out ...

  2. Java数组的复制

    初学Java的时候,需要复制数组的时候,一下子就想到使用赋值语句“=”,例如:array1 = array2:但后来慢慢发现,这个语句并不能将array2的内容复制给array1,而是将array2的 ...

  3. JAVA笔试题(全解)

      目录 一. Java基础部分................................................................. 9 1.一个".java& ...

  4. [Java] Eclipse中复制全限定名(Copy Qualified Name)的效果

    在Eclipse中,使用“ Copy Qualified Name”复制类的全限定名有两种效果: (1)选中工程上的java文件,右键 - Copy Qualified Name 复制的效果是带斜杠的 ...

  5. JAVA总结--Spring框架全解

    一.Spring简介 Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业 ...

  6. Java基础——ArrayList方法全解(字典版)

    引言 在使用集合 ArrayList 的时候,经常使用add.remove等,其他的没用过,甚至没听说过的还有很多.现在在这个教程中,简单的了解一下,不要求全都记下.相当于在你脑袋里建一个索引,就是有 ...

  7. Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()

    public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); a ...

  8. Java - 数组JVM角度详解

    http://developer.51cto.com/art/201001/176671.htm

  9. Java IO编程全解(四)——NIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...

随机推荐

  1. (NO.00003)iOS游戏简单的机器人投射游戏成形记(十四)

    我们首先必须将Level中所有机器人保存在某个数组里,因为该数组会在不同地方被访问,我们将其放在LevelRestrict类中,按道理应该放到GameState类中,这里从简. 打开LevelRest ...

  2. 海量数据挖掘MMDS week4: 推荐系统之数据降维Dimensionality Reduction

    http://blog.csdn.net/pipisorry/article/details/49231919 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  3. 【一天一道LeetCode】#61. Rotate List

    一天一道LeetCode系列 (一)题目 Given a list, rotate the list to the right by k places, where k is non-negative ...

  4. 【一天一道LeetCode】#58. Length of Last Word

    一天一道LeetCode系列 (一)题目 Given a string s consists of upper/lower-case alphabets and empty space charact ...

  5. VectorDrawable与AnimatedVectorDrawable

    VectorDrawable  Android L开始提供了新的API VectorDrawable 可以使用SVG类型的资源,也就是矢量图.先来一个例子吧. <?xml version=&qu ...

  6. 【单片机】基于有方GPRS的智能电梯控制系统

    前一篇文章<时钟及温度的显示>中所介绍的作品,是作为一个单片机新手在暑假学了一个月的单片机之后,做的第一个综合性作品,涵盖了二极管.蜂鸣器.数码管.液晶屏.按键.时钟芯片.温度传感器的控制 ...

  7. android驱动例子(LED灯控制)

    本例子,讲述在android2.1上完全自已开发一个驱动去控制硬件口并写应用测试该驱动,通过这样一个例子,解析android下的驱动开发流程的应用调用流程,可以说是很好的入门引导 要达到的效果:通过a ...

  8. RecyclerView详解

    RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把viewholder的实现封装起来,用户只要实 ...

  9. C++之默认参数

    C++可以为不指定参数提供默认值.一旦给一个参数赋了默认值,后面的所有参数,也都必须为默认值,并且默认值的类型也必须正确,默认值可以在原型或者函数定义中给出,但是不能两个位置同时给出. 接下来我们上代 ...

  10. ROS探索总结(十三)——导航与定位框架

    导航与定位是机器人研究中的重要部分.         一般机器人在陌生的环境下需要使用激光传感器(或者深度传感器转换成激光数据),先进行地图建模,然后在根据建立的地图进行导航.定位.在ROS中也有很多 ...