`
liuwei1981
  • 浏览: 770668 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:160901
社区版块
存档分类
最新评论

57.数组的拷贝

 
阅读更多

可以将一个数组变量拷贝给另一个数组变量,这个时候,这两个数组变量均指向同一个数组。通过任何一个数组变量进行操作,均会对另一个数组变量中的数组产生影响。

 

请看下面这个例子:

public class ArrayCopy1 {
 public static void main(String[] args) {
  int[] a = { 12, 3, 19, 2, 10, 13, 9 };
  int[] b;
  b = a;
  System.out.println("Before Modifying:");
  for (int i = 0; i < a.length; i++) {
   System.out.print("a[" + i + "]=" + a[i] + "    ");
  }
  System.out.println("");
  b[3] = 31;
  System.out.println("After Modifying:");
  for (int i = 0; i < a.length; i++) {
   System.out.print("a[" + i + "]=" + a[i] + "    ");
  }
 }
}


这个程序首先初始化了一个int类型的数组a,然后,将这个数组变量拷贝给另一个int类型的数组b,这个时候,数组变量a和b均指向同一个数组,如果通过数组变量b来对数组的内容进行修改,也会反映到数组变量a中。
执行这个程序后的结果是:
Before Modifying:
a[0]=12    a[1]=3    a[2]=19    a[3]=2    a[4]=10    a[5]=13    a[6]=9
After Modifying:
a[0]=12    a[1]=3    a[2]=19    a[3]=31    a[4]=10    a[5]=13    a[6]=9

 

这是因为数组本身是引用类型,就像前面提到的,变量赋值是完成了值传递,这个值是数组对象的引用,根据引用,修改的数组对象是同一个。

 

如果只是需要将数组的值拷贝到另一个数组,可以使用System的一个静态方法arraycopy,它有5个参数:from、fromIndex、to、toIndex、count,它的意思是将数组from中的索引为fromIndex开始的元素,拷贝到数组to中索引为toIndex的位置,拷贝的元素个数为count个。


看一个使用System类的arraycopy()方法来拷贝数组值的例子:

 

public class ArrayCopy2 {
 public static void main(String[] args) {
  int[] a = new int[10];
  int[] b = new int[10];
  System.out.println("Before Copying:");
  for (int i = 0; i < 10; i++) {
   a[i] = i + 1;
   b[i] = (i + 1) * 100;
   System.out.print("b[" + i + "]=" + b[i] + "    ");
  }
  System.out.println("");
  System.arraycopy(a, 2, b, 5, 5);
  System.out.println("After Copying:");
  for (int i = 0; i < b.length; i++) {
   System.out.print("b[" + i + "]=" + b[i] + "    ");
  }
 }
}


执行这个程序后在控制台上打印的结果如下:


Before Copying:
b[0]=100    b[1]=200    b[2]=300    b[3]=400    b[4]=500    b[5]=600    b[6]=700    b[7]=800    b[8]=900    b[9]=1000
After Copying:
b[0]=100    b[1]=200    b[2]=300    b[3]=400    b[4]=500    b[5]=3    b[6]=4      b[7]=5    b[8]=6    b[9]=7

 

通过这种方式拷贝数组,只是将a数组中指定元素的值拷贝给了b数组中的指定元素,a数组本身并不发生变化。

分享到:
评论

相关推荐

    js数组的深拷贝

    在JavaScript中,数组的深拷贝是一个常见的需求,它涉及到数据结构的复制,尤其是在处理复杂对象和嵌套数据时。深拷贝与浅拷贝不同,浅拷贝只是复制引用,而深拷贝会创建一个新的对象,包含原始数组的所有元素,并...

    dotnet 6 数组拷贝性能对比.rar

    在.NET 6中,数组拷贝是一个常见的操作,特别是在处理大量数据时。本文将深入探讨.NET 6中数组拷贝的性能对比,并将其与Java语言的相应操作进行比较。了解这些知识对于优化代码效率和提升应用程序性能至关重要。 ...

    关于数组创建以及拷贝时的内存分配

    接下来,我们讨论数组拷贝。拷贝一个数组,尤其是大数组时,会涉及到两种主要策略:浅拷贝和深拷贝。浅拷贝仅仅复制了数组的引用,这意味着两个数组都指向同一块内存。因此,改变其中一个数组会影响到另一个。在C++...

    Java数组练习题目.pdf

    11. 参数传递:向方法传递数组参数时,传递的是数组的引用,而非拷贝。 12. 平均查找长度:线性查找法的平均查找长度为数组长度的一半,即`(n+1)/2`,其中n为数组长度。 13. 初始化:数组初始化包括静态初始化(在...

    数组的深拷贝与浅拷贝以及数组拷贝的几种方式比较

    目录一、深拷贝与浅拷贝解析浅拷贝深拷贝二、数组拷贝的方式1.for循环来拷贝2.System.arraycopy( )拷贝3.Arrays.copyOf( )拷贝4.clone( )拷贝5.解释三、四种拷贝方式效率比较1. System.arraycopy( )2.Arrays.copyOf...

    javascript数组

    - 同样返回当前数组的一个浅拷贝。 ##### 7. 数组元素的排序 可以对数组中的元素进行排序: - **反转元素顺序**:`arrayObj.reverse();` - 反转数组中元素的顺序。 - **排序**:`arrayObj.sort();` - 默认按...

    Swift视频教程:集合类型 创建数组及初始化

    3. 数组的拷贝:使用`copy()`方法创建数组副本,避免引用同一内存地址。 六、多维数组 Swift支持多维数组,例如二维数组可以表示表格数据。创建二维数组的方式有多种,如: ```swift var matrix = [[1, 2], [3, 4]]...

    java数组练习题目 (2).docx

    数组复制时,简单的赋值运算符"="并不实现深拷贝,它只是将一个数组的引用复制给另一个数组,而不是复制数组的内容。没有显式引用变量的数组被称为匿名数组。JVM将数组存储在堆内存中,因为数组是对象,而对象都在堆...

    Java-数组练习题目(汇编).pdf

    10. 不是数组复制方法的是C,因为不能直接用“=”进行数组复制,它只是拷贝引用。 11. 数组a的第三个元素表示为B. `a[2]`,数组索引从0开始。 12. 当访问无效的数组下标时,会B. 抛出异常,具体是`...

    Java编程详细教程数组PPT教案学习.pptx

    Java编程中的数组是一种重要的数据结构,它允许程序员存储多个同类型的数据在一个单一的变量中。...在实际开发中,还需要注意数组的拷贝(深拷贝与浅拷贝)和排序等高级操作,这些都是提升代码效率和质量的关键。

    数组练习题Subject:数组答案源代码

    2. 数组拷贝 `System.arraycopy()` 方法用于将数组的一部分复制到另一个数组中。这对于创建数组副本或处理数组部分非常有用。 3. 数组排序 Java的 `Arrays.sort()` 方法可以对数值型数组进行排序。对于自定义对象...

    1.深浅拷贝.pptx

    * 对象(数组、函数、正则表达式、Date 等) 浅拷贝与深拷贝的区别 浅拷贝是指复制对象的引用,而不是复制对象本身。深拷贝是指完全复制对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。 在实际应用...

    Java_数组练习答案 (2).docx

    10. 不是数组复制方法的是C,因为"="进行复制只是浅拷贝,不是真正复制数组。 11. 数组a的第三个元素表示为a[2]。 12. 访问无效数组下标会抛出异常。 13. 正确的数组复制语句是A,将a复制到b的开始位置,复制a的长度...

    多维数组和对象-深去重和深拷贝.js

    对多维数组,对象,进行去重,相同的值只保留一个,常见的new Set()和filter,只能去重一维数组,并不能进行深层的去重,逻辑:判断是否为对象,为对象判断是否为数组或是真的对象,递归一直筛选为值,判断首次...

    Java编程思修第4版本学习笔记(下).pdf

    - 数组拷贝:将一个数组的元素复制到另一个数组中。 5. 数组使用的注意事项: - 尝试访问超出数组界限的索引将引发`ArrayIndexOutOfBoundsException`。 - 数组声明和初始化必须提供足够的信息以确定数组的类型和...

    java 数组 PPT

    2. 深拷贝与浅拷贝:数组拷贝有深拷贝(复制整个数组及其中的元素)和浅拷贝(只复制数组引用)之分,使用`System.arraycopy()`方法可以实现深拷贝。 3. 排序:Java的`Arrays`类提供了对数组进行排序的方法,如`...

    Java学习笔记,数组初步

    * 拷贝指的是将某个数组的内容拷贝到另一个数组中。 数组的遍历可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。 for-each 循环是 JDK1.5 新增加的功能,专门用于读取数组或集合中所有...

    javascript中数组深拷贝途径及对象数组深拷贝

    javascript中数组深拷贝途径及对象数组深拷贝 什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用“=”来直接把一个数组赋值给一个变量,如: var a=[1,2,3]; var b=a; console.log(b); ...

    js 对象、数组赋值不指定路径(简洁写法).pdf

    在提供的代码中,使用了`for`循环和扩展运算符创建了一个新的数组`pageList`,每个元素都是`list`数组中对应元素的浅拷贝。`pageList.push({...list[i]})` 这一行代码就是对数组元素进行浅拷贝并添加到新数组中的...

Global site tag (gtag.js) - Google Analytics