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. Mahout推荐算法之ItemBased

    Mahout推荐之ItemBased 一.   算法原理 (一)    基本原理 如下图评分矩阵所示:行为user,列为item. 图(1) 该算法的原理: 1.  计算Item之间的相似度. 2.  ...

  2. python的sys模块

    Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处.借马云找员工的说法,"找最合适的而不是最天才的",这句话,我个人觉得在很多方面都能适应,学习也不在话下.Sys模块 ...

  3. 【Unity Shaders】Using Textures for Effects——让sprite sheets动起来

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  4. leetcode 169 Majority Element 冰山查询

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  5. DBUtils学习总结

    这几天闲着无聊,就看了一下DBUtils这个数据库组件.中间有了一些想法,现在记录下来. 文章主要分几部分 1 最简单同时也是最经常使用的一些范例 2 学习源码前的一些知识储备 3 我自己写的mydb ...

  6. Leetcode_154_Find Minimum in Rotated Sorted Array

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43416613 Suppose a sorted array ...

  7. 安卓笔记-- popupwindow back键不消失的问题

    // 可能是一个bug ,如果不设置背景,触摸焦点外和back键都不会消失,需如下设置,并不会影响你的背景         popupWindow.setBackgroundDrawable(new ...

  8. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  9. centos 下安装mysql-5.6.11

    这次是在centos6.4下安装mysql,在安装之前,你要先确定你的linux已经安装了这些包: wget, gcc-c++, ncurses-devel ,cmake, make ,perl 如果 ...

  10. mybatis源码之PreparedStatementHandler

    /** * @author Clinton Begin */ public class PreparedStatementHandler extends BaseStatementHandler { ...