import java.util.Arrays; * t$ ]0 R: @9 e1 \! K/ ]) a
/**5 W* {6 e, `; i
* 年夜指定源数组中复制一个数组,复制年夜指定的位置起头,
1 g7 H4 G8 i9 s% u7 { *到方针数组的指定位置竣事% I! ^7 q: K2 H
*/
2 S0 T" [0 y3 c/ V7 Q0 H& j3 e' ] public class LessionSystemArraycopy {8 X7 w9 ~+ K# q% A$ x$ O6 x# G
public static void main(String[] args) {
: v2 E; W/ u! [; ]; [' |; ^ // 此方位为native体例。! r- w- G) g2 }9 Y9 G
// public static native void arraycopy(
- f. y: ^5 B" o* R/ S // Object src, int srcPos, Object dest, // int destPos, int length);
! p: E8 D3 P8 Z8 I" L" f //初始化! d- O3 @! T$ U
int[] ids = { 1, 2, 3, 4, 5 }; System.out.println(Arrays.toString(ids)); // [1, 2, 3, 4, 5]
: n. e X! r! P$ j" b7 U8 ] //测试自我复制1 r- ]( w) _1 C$ l) S: P
//把年夜索引0起头的2个数字复制到索引为3的位置上0 E- }2 a7 s+ f% p4 [
System.arraycopy(ids, 0, ids, 3, 2); System.out.println(Arrays.toString(ids)); // [1, 2, 3, 1, 2]9 u2 }0 {2 [9 T
//测试复制到此外数组上
& x+ e( J+ ]0 ]5 t+ ?6 o //将数据的索引1起头的3个数据复制到方针的索引为0的位置上
% P: x$ Y+ U0 R& ?# v# {4 n( I int[] ids2 = new int[6];
6 | q7 y. x: Y System.arraycopy(ids, 1, ids2, 0, 3); System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
! j, T a! t* E" W2 J3 ]' D' a //此功能要求1 U* A! x8 T# E
//源的肇端位置+长度不能跨越末尾
' H0 n* s, J( C //方针肇端位置+长度不能跨越末尾4 Q% U. D9 S+ R8 b: y; H* P
//且所有的参数不能为负数2 i% E: N; S) ^1 W
try {7 v1 H* A9 q( p) y6 i9 a& P
System.arraycopy(ids, 0, ids2, 0, ids.length + 1);' z% \0 n" t+ b) g
} catch (IndexOutOfBoundsException ex) {
{% M( Y& \, k& S) }5 j // 发生越界异常,数据不会改变System.out.println("拷贝发生异常:数据越界。");" I) l( F/ J# z2 W
}
* ]1 S) I. |2 K) D& U' r System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
7 L/ Y5 \: o, x4 C4 g //如不美观是类型转换问题
6 q* A* b7 a0 z( }% s: \ Object[] o1 = { 1, 2, 3, 4.5, 6.7 };
+ [, M8 Z# F6 J2 S5 X/ A" t+ ^6 r) m Integer[] o2 = new Integer[5];
+ g$ G6 k( G5 B# k* J5 W# p" N5 O System.out.println(Arrays.toString(o2)); // [null, null, null, null, null] {/ R. x5 e T- R6 d+ [3 G
try {/ g, S$ W/ j$ D6 l! ^) E4 j
System.arraycopy(o1, 0, o2, 0, o1.length);* O, f7 U: y$ ~$ ?* S1 j
} catch (ArrayStoreException ex) {! ]" J; v+ ~- n0 c: C
// 发保留储转换,部门成功的数据会被复制曩昔
& R6 v7 i4 }! a( Z0 k System.out.println("拷贝发生异常:数据转换错误,无法存储。");
# s0 S0 V* f- a7 L( d( R }% b) ]* E3 O, D
// 年夜结不美旁观,前面3个可以复制的数据已经被存储了。剩下的则没有0 W; s5 B2 S2 v
System.out.println(Arrays.toString(o2)); // [1, 2, 3, null, null]
, t' ]! @2 d( q! g+ \6 E3 B6 p }
9 |* ?8 G' h/ [* b+ X* C) _" p } |