在java里面复制数组有几种方式:
(1)clone
(2)System.arraycopy
(3)Arrays.copyOf
(4)Arrays.copyOfRange
下面分别介绍下他们的用法:
(1)clone方法是从Object类继承过来的,基本数据类型(String,boolean,char,byte,short,float,double.long)都可以直接使用clone方法进行克隆,注意String类型是因为其值不可变所以才可以使用。
int a1[]={1,3}; int a2[]=a1.clone(); a1[0]=666; System.out.println(Arrays.toString(a1));//[666,3] System.out.println(Arrays.toString(a2));//[1,3]
2)System.arraycopy方法是一个本地的方法,源码里定义如下:
/** * System.arraycopy(src,srcPos,dest,destPos,length); * src :源数组 srcPos:源数组要复制的起始位置; * dest:目的数组 destPos:目的数组放置的起始位置; * length:复制的长度. */ public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
用法示例:
int a1[]={1,2,3,4,5}; int a2[]=new int[10]; System.arraycopy(a1,1,a2,3,3); System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5] System.out.println(Arrays.toString(a2));//[0, 0, 0, 2, 3, 4, 0, 0, 0, 0]
注意:这个方法,需要我们自己new一个新的数组
(3)Arrays.copyOf底层其实也是用的System.arraycopy 源码如下:
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { @SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
用法示例:
int a1[]={1,2,3,4,5}; int a2[]=Arrays.copyOf(a1,3);//(原数组,拷贝的个数) System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5] System.out.println(Arrays.toString(a2));//[1, 2, 3] //这个方法不需要我们new新的数组
(4)Arrays.copyOfRange底层其实也是用的System.arraycopy,只不过封装了一个方法
int a1[]={1,2,3,4,5}; int a2[]=Arrays.copyOfRange(a1,0,1);//(原数组,开始位置,拷贝的个数) System.out.println(Arrays.toString(a1));//[1, 2, 3, 4, 5] System.out.println(Arrays.toString(a2));//[1]
最后需要注意的是基本类型的拷贝是不影响原数组的值的,如果是引用类型,就不能这用了,因为数组的拷贝(复制)是浅拷贝。
以上是java中的数组怎么复制的详细内容。更多信息请关注PHP中文网其他相关文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具