java 二维数组 arraycopy_Java对数组的复制[通俗易懂]

java 二维数组 arraycopy_Java对数组的复制[通俗易懂]定义一个数组int[]a={3,1,4,2,5};int[]b=a;数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopyint[]a={3,1,4,2,5};int[]b=a.clone();b[0]=10;System.out.println(b[0]+””+a[0…

大家好,又见面了,我是你们的朋友全栈君。

定义一个数组int[] a={3,1,4,2,5}; int[] b=a;  数组b只是对数组a的又一个引用,即浅拷贝。

如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopy

int[] a={3,1,4,2,5};int[] b=a.clone();b[0]=10;System.out.println(b[0]+”  “+a[0]);但是clone和System.arrayCopy都是对一维数组的深度复制。

对于二维数组则不一样:int[][] a={
{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+”  “+a[0][0]);输出为10  10所以clone并不能直接作用于二维数组。

因为java中没有二维数组的概念,只有数组的数组。所以二维数组a中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。

要证明,只需看下面的输出int[][] a={
{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+”  “+a[0][0]);System.out.println(a[0]==b[0]);第5句输出为true.用clone对二维数组进行复制,要在每一维上调用clone函数

int[][] a={
{3,1,4,2,5},{4,2}};int[][] b=new int[a.length][];for(int i=0;i

小结:

数组的复制方法现在至少有四个思路:

1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多

2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。

3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。

4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156737.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle创建表空间和创建临时表空间

    Oracle创建表空间和创建临时表空间/*第1步:创建临时表空间 */createtemporarytablespacekc_temptempfile’C:\app\Administrator\oradata\orcl\kc_temp.dbf’ size50m  autoextendon  next50mmaxsize20480m  extentmanagementlocal;   

    2022年7月27日
    7
  • python手动抛出异常能正常启动_python数组去掉第一个元素

    python手动抛出异常能正常启动_python数组去掉第一个元素try:print(‘正常执行’)#根据业务逻辑判断,需要手动抛出异常raiseException(print(a))#raiseException(‘print(a)’)#注意这两个的区别,这个带字符串,直接打印字符串里的内容,python把字符串的内容一字不差解析成了异常并打印出来print(‘正常结束’)exceptExcepti…

    2022年10月18日
    6
  • MyBatis-Spring整合 注入SqlSessionTemplate

    MyBatis-Spring整合 注入SqlSessionTemplateSqlSessionTemplateSqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。SqlSessionTemplate是线程安全的。最终要的是让spring获取到SqlSessionTemplate然后注入给工具类,让工具类操作数据库

    2022年5月31日
    52
  • EL表达式详解_EL表达式问内置对象属性值

    EL表达式详解_EL表达式问内置对象属性值 EL表达式   1、EL简介1)语法结构    ${expression}2)[]与.运算符   EL提供.和[]两种运算符来存取数据。   当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用[]。例如:     ${user.My-Name}应当改为${user

    2022年7月28日
    9
  • 完全删除SQL SERVER[通俗易懂]

    完全删除SQL SERVER[通俗易懂]    我们在安装SQLSERVER的时候,有时会出现问题,而在重新安装的时候,有时候会因为上次安装遗留的东西而导致本次安装失败,所以完全删除SQLSERVER比较重要。完全删除方法如下:      1、控制面板里删除。2、安装目录文件夹删除。3、注册表删除。4、安装windows install clean up 删除所有sql相关的东西。    …

    2022年9月26日
    5
  • 安卓system文件夹_system文件丢失

    安卓system文件夹_system文件丢失\system\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是/data/文件夹中\system\app\AlarmClock.apk闹钟\system\app\AlarmClock.odex\system\app\Browser.apk浏览器\system\app\Browser.odex\system\app\Bugreport.apkBug报告\system\app\Bug

    2022年10月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号