首先看一下声明,这是一个native方法:
// src - the source array
// srcPos - starting position in the source array
// dest - the destination array
// destPos - starting position in the destination data
// length - the number of array elements to be copied
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
1. 测试自我复制
int[] array = new int[] { 2, 3, 4, 5, 6 };
System.out.println(Arrays.toString(array)); // [2, 3, 4, 5, 6]
System.arraycopy(array, 1, array, 3, 2);
System.out.println(Arrays.toString(array)); // [2, 3, 4, 3, 4]
2. 测试复制
int[] array2 = new int[6];
System.arraycopy(array, 1, array2, 0, 3);
System.out.println(Arrays.toString(array2)); // [3, 4, 3, 0, 0, 0]
3. 测试数组越界
不越界的要求:
a. 源的起始位置 + 长度 <= 源的末尾
b. 目标的起始位置 + 长度 <= 目标的末尾
c. 且所有的参数 >= 0
System.arraycopy(array, 0, array2, 0, array.length + 1); // java.lang.ArrayIndexOutOfBoundsException
4. 类型转换
源和目标数组的类型要一致:
a. 类型相同
b. 都是引用类型,并且可以转换
Object[] array3 = new Object[] { 1, null, 3, 4.4, 5.1 };
Integer[] array4 = new Integer[5];
// ArrayStoreException would be thrown for copying the array whose component type is reference type
// to the one whose component type is primitive type
// int array 4 = new int[5];
try {
System.arraycopy(array3, 0, array4, 0, array3.length);
} catch (ArrayStoreException e) {
e.printStackTrace(); // java.lang.ArrayStoreException
}
System.out.println(Arrays.toString(array4)); // [1, null, 3, null, null]
可以看出,复制成功的部分会保留。
分享到:
相关推荐
下面是一个简单的示例,演示如何使用`System.arraycopy`方法复制数组元素: ```java public class ArrayCopyExample { public static void main(String[] args) { int[] source = {1, 2, 3, 4, 5, 6}; int[] ...
`System.arraycopy` 和 `Arrays.copyOf` 都是Java中用于复制数组的方法,但它们在使用和处理异常情况上有所不同。这两个方法在处理数组复制时,提供了便利和效率,但各有其适用场景。 `System.arraycopy` 是一个...
使用System.arraycopy()实现数组之间的复制
使用System.arraycopy()方法可以实现数组的合并,例如: ```java String[] aa = {"11","22","33"}; String[] bb = {"44","55","66"}; String[] cc = {"77","88","99"}; // 合并两个数组 String[] dd = new String...
这三种方法分别是:使用循环手动填充新数组、利用`List`集合进行合并再转换为数组以及直接使用`System.arraycopy()`方法。此外,还将涉及如何合并不同类型的数组,如字符数组与整型数组。 ### 方法一:使用循环合并...
我们首先创建了一个新的字符串数组 c,然后使用 System.arraycopy 方法将数组 a 和 b 的元素复制到数组 c 中。 代码实现: ```java public static String[] getThreeArray() { String[] a = {"0", "1", "2"}; ...
本篇文章将介绍两种方法来合并两个数组,一种是使用Java内置的`System.arraycopy()`函数,另一种是不使用预定义函数,而是通过手动遍历来实现。 首先,让我们详细讨论使用`System.arraycopy()`的方法。这个方法是从...
数组元素的复制通常有两种方式:使用循环进行逐个元素的复制,以及使用Java提供的`System.arraycopy()`方法。 首先,我们来探讨一下使用循环复制数组元素的方法。例如,当我们有一个已经初始化的数组`a`,我们想要...
总结来说,Java数组倒置可以通过多种方式实现,包括使用for循环、`System.arraycopy()`以及Java 8的流API。每种方法有其适用场景和优缺点,开发者应根据实际需求选择合适的方法。在实际开发中,理解并掌握这些基本...
例如,如果你需要复制一个整型数组,避免使用for循环,而是直接调用`System.arraycopy(array1, 0, array2, 0, array1.length)`,这样可以减少不必要的CPU和内存开销。 以上四个优化技巧都是Java开发中常见的性能...
System.arraycopy(writeStringToBytes, i*tempLength, temp, 0, writeStringToBytes.length%tempLength); ops.write(new String(temp,"GBK").trim().getBytes(),0,writeStringToBytes.length%tempLength);...
总结来说,Java中合并两个`byte`数组可以通过创建新的数组并使用`System.arraycopy()`方法来实现。如果需要进一步处理合并后的数组,如反转或加密,可以分别使用自定义函数或Java内置的加密库。这些操作在处理二进制...
总的来说,Java中数组倒置有多种实现方式,包括使用两个指针交换元素、使用`System.arraycopy`复制元素以及对ArrayList使用`Collections.reverse`。理解这些方法可以帮助开发者根据具体需求选择最合适的方式来处理...
例如,`ArrayCopy.java`文件可能有以下代码: ```java public class ArrayCopy { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; int[] copy = new int[original.length]; // ...
在Java中,可以使用`System.arraycopy()`方法或创建一个新的数组并遍历两个原始数组来完成此操作。假设我们有两个整型数组`int[] array1`和`int[] array2`,我们可以这样做: ```java int[] combinedArray = new ...
3. **使用 `System.arraycopy()` 方法**: `System.arraycopy()` 是一个专门用于数组之间复制的高效方法。它接受五个参数:源数组、源数组的起始索引、目标数组、目标数组的起始索引以及要复制的元素数量。 ```...
1. **使用`System.arraycopy()`**: 这是Java中最常用的方法,它可以从源数组中复制指定范围的元素到目标数组中。例如,假设我们有两个`byte`数组`arr1`和`arr2`,我们可以创建一个新的`byte`数组`arr3`,并用`...
Java提供了System类的arraycopy()方法,它是进行数组复制的最直接和高效的方式。该方法接受五个参数:源数组、源数组起始位置、目标数组、目标数组起始位置和复制的元素数量。例如: ```java int[] srcArray = {1...
如示例中的`IRB`类,使用`System.arraycopy()`可以显著提高数组复制的效率。 此外,还有其他一些常见的Java优化技巧: 5. **减少对象创建**: 对象创建和垃圾收集是Java性能开销的主要来源之一。尽量重用对象,...