Java数组的复制全解
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数组的复制全解的更多相关文章
- java 数组的复制
java数组的复制分为数组地址的复制和值的复制 地址的复制: int []arrA={11,22,33,44}; //创建一个数组 int [] arrB=new int[5]; System.out ...
- Java数组的复制
初学Java的时候,需要复制数组的时候,一下子就想到使用赋值语句“=”,例如:array1 = array2:但后来慢慢发现,这个语句并不能将array2的内容复制给array1,而是将array2的 ...
- JAVA笔试题(全解)
目录 一. Java基础部分................................................................. 9 1.一个".java& ...
- [Java] Eclipse中复制全限定名(Copy Qualified Name)的效果
在Eclipse中,使用“ Copy Qualified Name”复制类的全限定名有两种效果: (1)选中工程上的java文件,右键 - Copy Qualified Name 复制的效果是带斜杠的 ...
- JAVA总结--Spring框架全解
一.Spring简介 Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业 ...
- Java基础——ArrayList方法全解(字典版)
引言 在使用集合 ArrayList 的时候,经常使用add.remove等,其他的没用过,甚至没听说过的还有很多.现在在这个教程中,简单的了解一下,不要求全都记下.相当于在你脑袋里建一个索引,就是有 ...
- Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); a ...
- Java - 数组JVM角度详解
http://developer.51cto.com/art/201001/176671.htm
- Java IO编程全解(四)——NIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...
随机推荐
- Mahout推荐算法之ItemBased
Mahout推荐之ItemBased 一. 算法原理 (一) 基本原理 如下图评分矩阵所示:行为user,列为item. 图(1) 该算法的原理: 1. 计算Item之间的相似度. 2. ...
- python的sys模块
Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处.借马云找员工的说法,"找最合适的而不是最天才的",这句话,我个人觉得在很多方面都能适应,学习也不在话下.Sys模块 ...
- 【Unity Shaders】Using Textures for Effects——让sprite sheets动起来
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- leetcode 169 Majority Element 冰山查询
Given an array of size n, find the majority element. The majority element is the element that appear ...
- DBUtils学习总结
这几天闲着无聊,就看了一下DBUtils这个数据库组件.中间有了一些想法,现在记录下来. 文章主要分几部分 1 最简单同时也是最经常使用的一些范例 2 学习源码前的一些知识储备 3 我自己写的mydb ...
- Leetcode_154_Find Minimum in Rotated Sorted Array
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43416613 Suppose a sorted array ...
- 安卓笔记-- popupwindow back键不消失的问题
// 可能是一个bug ,如果不设置背景,触摸焦点外和back键都不会消失,需如下设置,并不会影响你的背景 popupWindow.setBackgroundDrawable(new ...
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...
- centos 下安装mysql-5.6.11
这次是在centos6.4下安装mysql,在安装之前,你要先确定你的linux已经安装了这些包: wget, gcc-c++, ncurses-devel ,cmake, make ,perl 如果 ...
- mybatis源码之PreparedStatementHandler
/** * @author Clinton Begin */ public class PreparedStatementHandler extends BaseStatementHandler { ...
