可以将一个数组变量拷贝给另一个数组变量,这个时候,这两个数组变量均指向同一个数组。通过任何一个数组变量进行操作,均会对另一个数组变量中的数组产生影响。
请看下面这个例子:
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数组本身并不发生变化。
分享到:
相关推荐
在JavaScript中,数组的深拷贝是一个常见的需求,它涉及到数据结构的复制,尤其是在处理复杂对象和嵌套数据时。深拷贝与浅拷贝不同,浅拷贝只是复制引用,而深拷贝会创建一个新的对象,包含原始数组的所有元素,并...
在.NET 6中,数组拷贝是一个常见的操作,特别是在处理大量数据时。本文将深入探讨.NET 6中数组拷贝的性能对比,并将其与Java语言的相应操作进行比较。了解这些知识对于优化代码效率和提升应用程序性能至关重要。 ...
接下来,我们讨论数组拷贝。拷贝一个数组,尤其是大数组时,会涉及到两种主要策略:浅拷贝和深拷贝。浅拷贝仅仅复制了数组的引用,这意味着两个数组都指向同一块内存。因此,改变其中一个数组会影响到另一个。在C++...
11. 参数传递:向方法传递数组参数时,传递的是数组的引用,而非拷贝。 12. 平均查找长度:线性查找法的平均查找长度为数组长度的一半,即`(n+1)/2`,其中n为数组长度。 13. 初始化:数组初始化包括静态初始化(在...
目录一、深拷贝与浅拷贝解析浅拷贝深拷贝二、数组拷贝的方式1.for循环来拷贝2.System.arraycopy( )拷贝3.Arrays.copyOf( )拷贝4.clone( )拷贝5.解释三、四种拷贝方式效率比较1. System.arraycopy( )2.Arrays.copyOf...
- 同样返回当前数组的一个浅拷贝。 ##### 7. 数组元素的排序 可以对数组中的元素进行排序: - **反转元素顺序**:`arrayObj.reverse();` - 反转数组中元素的顺序。 - **排序**:`arrayObj.sort();` - 默认按...
3. 数组的拷贝:使用`copy()`方法创建数组副本,避免引用同一内存地址。 六、多维数组 Swift支持多维数组,例如二维数组可以表示表格数据。创建二维数组的方式有多种,如: ```swift var matrix = [[1, 2], [3, 4]]...
数组复制时,简单的赋值运算符"="并不实现深拷贝,它只是将一个数组的引用复制给另一个数组,而不是复制数组的内容。没有显式引用变量的数组被称为匿名数组。JVM将数组存储在堆内存中,因为数组是对象,而对象都在堆...
10. 不是数组复制方法的是C,因为不能直接用“=”进行数组复制,它只是拷贝引用。 11. 数组a的第三个元素表示为B. `a[2]`,数组索引从0开始。 12. 当访问无效的数组下标时,会B. 抛出异常,具体是`...
Java编程中的数组是一种重要的数据结构,它允许程序员存储多个同类型的数据在一个单一的变量中。...在实际开发中,还需要注意数组的拷贝(深拷贝与浅拷贝)和排序等高级操作,这些都是提升代码效率和质量的关键。
2. 数组拷贝 `System.arraycopy()` 方法用于将数组的一部分复制到另一个数组中。这对于创建数组副本或处理数组部分非常有用。 3. 数组排序 Java的 `Arrays.sort()` 方法可以对数值型数组进行排序。对于自定义对象...
* 对象(数组、函数、正则表达式、Date 等) 浅拷贝与深拷贝的区别 浅拷贝是指复制对象的引用,而不是复制对象本身。深拷贝是指完全复制对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。 在实际应用...
10. 不是数组复制方法的是C,因为"="进行复制只是浅拷贝,不是真正复制数组。 11. 数组a的第三个元素表示为a[2]。 12. 访问无效数组下标会抛出异常。 13. 正确的数组复制语句是A,将a复制到b的开始位置,复制a的长度...
对多维数组,对象,进行去重,相同的值只保留一个,常见的new Set()和filter,只能去重一维数组,并不能进行深层的去重,逻辑:判断是否为对象,为对象判断是否为数组或是真的对象,递归一直筛选为值,判断首次...
- 数组拷贝:将一个数组的元素复制到另一个数组中。 5. 数组使用的注意事项: - 尝试访问超出数组界限的索引将引发`ArrayIndexOutOfBoundsException`。 - 数组声明和初始化必须提供足够的信息以确定数组的类型和...
2. 深拷贝与浅拷贝:数组拷贝有深拷贝(复制整个数组及其中的元素)和浅拷贝(只复制数组引用)之分,使用`System.arraycopy()`方法可以实现深拷贝。 3. 排序:Java的`Arrays`类提供了对数组进行排序的方法,如`...
* 拷贝指的是将某个数组的内容拷贝到另一个数组中。 数组的遍历可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。 for-each 循环是 JDK1.5 新增加的功能,专门用于读取数组或集合中所有...
javascript中数组深拷贝途径及对象数组深拷贝 什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用“=”来直接把一个数组赋值给一个变量,如: var a=[1,2,3]; var b=a; console.log(b); ...
在提供的代码中,使用了`for`循环和扩展运算符创建了一个新的数组`pageList`,每个元素都是`list`数组中对应元素的浅拷贝。`pageList.push({...list[i]})` 这一行代码就是对数组元素进行浅拷贝并添加到新数组中的...