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,这 ...
随机推荐
- 单元测试junit框架详解
首先在给出一个类Operator,加入如下代码: public class Operator { // 加法 运算 public int add(int i,int j){ return i+j; } ...
- Touch Handling in Cocos2D 3.x(一)
原帖地址 Cocos2d 3.0 带来经过完全修正后的触摸处理系统.本篇博文将提供所有触摸相关的信息: 接收触摸 取得触摸位置 处理不同个触摸生命周期中的事件 实现一个拖放机制 让我们开始吧 ;) 通 ...
- Java实现简易的文件的迁移器
Java作为世界上最受欢迎的一门编程语言,自然是有原因的.比如说我们可以直接的方便的调用其中的函数来实现我们想要的功能. 一个偶然的机会,我浏览API文档时发现了一个名为FileDialog的类,然后 ...
- libevent之event_base
event_base是libevent的事务处理框架,负责事件注册.删除等,属于Reactor模式中的Reactor. event_base结构体 event_base结构体定义于<event_ ...
- 支持老版本IE的3种解决方案
原文链接: 3 Solutions for Supporting Internet Explorer 翻译人员: 铁锚 翻译时间: 2014年2月14日 在刚发布的那几年,Internet Explo ...
- 《java入门第一季》之面向对象(匿名对象)
/* 匿名对象:就是没有名字的对象. 匿名对象的应用场景: A:调用方法,仅仅只调用一次的时候. 注意:调用多次的时候,不适合. 匿名对象调用完毕就是垃圾.可以被垃圾回收器回收,释放了系统资源. B: ...
- ANDROID框架结构和介绍
下图是ANDROID4.4 版本包含的所有系统服务.本地服务和应用的框架图,组织为三层:应用层.系统服务层.本地进程和服务层.应用层通常通过服务提供的对外API接口(一个服务管理对象)与服务交互,系统 ...
- utl_file包的使用
首先看一下oracle 脚本 /* # $Header: HTMomse12.sql 12.0.4 20121015 Support $ #+============================= ...
- Oracle Advanced Pricing White Papers
Oracle Order Management - Version 11.5.10.0 and later Oracle Advanced Pricing - Version 11.5.10 and ...
- linux socket编程之TCP与UDP
转:http://blog.csdn.net/gaoxin1076/article/details/7262482 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制 ...
