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. 【一天一道LeetCode】#62. Unique Paths

    一天一道LeetCode系列 (一)题目 A robot is located at the top-left corner of a m x n grid (marked 'Start' in th ...

  2. 将Ext JS 5应用程序导入Web项目以及实现本地化

    在Ext JS 5,使用了新的脚本和样式加载方式,这对于将应用程序导入到Web项目中产生了点小麻烦.而对于本地化文件的导入,也采用了新的方式,本文将一一解答这些问题. 将Ext JS 5应用程序导入W ...

  3. ARM v7汇编与相关练习

    程序入口: _startc 语言入口: main@:              注释;main:           标签;伪指令:         给汇编器读的指令;.global main    ...

  4. 14_Android中Service的使用,关于广播接收者的说明

     服务:长期后台运行的没有界面的组件 android应用:什么地方需要用到服务? 天气预报:后台的连接服务器的逻辑,每隔一段时间获取最新的天气信息 股票显示:后台的连接服务器的逻辑,每隔一段时间获 ...

  5. MySql常用操作语句(1:启动、连接数据库及用户操作)

    下方将个人常用的MySql操作语句(Win7下)总结如下: 1. 启动与关闭数据库 “管理员”权限, MySql安装目录下bin目录//:  1.1 启动 @>net start mysql   ...

  6. 【46】java对象的三个特征(oop)

    对象的三个特征: 对象的行为: 对象有哪些行为和方法 同一个类的实例,由于支持相同的行为具有家族式的特征,对象的行为是由方法定义的. 对象的状态: 施加方法时.对象的响应 每个对象都保存着描述当前特征 ...

  7. 微信android混淆打包减少安装包大小

    首先,感谢微信android团队的分享 微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了 ...

  8. SharePoint 2007 制作值班表

    背景:公司有了新项目,其中有一块是值班表,简单地说,就是客户需要安排值班,希望把所有的值班安排好,输入到网站中,然后每天发布出来,方便大家看:一开始看到需求,觉得应该用程序去实现,后来想想,其实挺简单 ...

  9. obj-c中如何定义类的私有实例方法

    obj-c原生没有提供此项机制,不像java有private/protected/public方法的概念.obj-c中的@private以及类似的@protected和@public是用于修饰类的实例 ...

  10. LeetCode之旅(19)-Power of Two

    题目 Given an integer, write a function to determine if it is a power of two. Credits: Special thanks ...