[Java基础] System.arraycopy使用

简介:

转载自: http://blog.csdn.net/java2000_net/article/details/4059465

System提供了一个native 静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。 注意:src and dest都必须是同类型或者可以进行转换类型的数组. 有趣的是这个函数可以实现自己到自己复制.

复制代码
import java.util.Arrays;
/**
 * 老紫竹JAVA提高教程 - System.arraycopy方法的使用。<br>
 * <br>
 * 从指定源数组中复制一个数组,复制从指定的位置开始,<br>
 * 到目标数组的指定位置结束
 *
 * @author 老紫竹的家(java2000.net,laozizhu.com)
 *
 */
public class LessionSystemArraycopy {
  public static void main(String[] args) {
    // 此方位为native方法。
    // public static native void arraycopy(
    // Object src, int srcPos, Object dest,
    // int destPos, int length);
    // 初始化
    int[] ids = { 1, 2, 3, 4, 5 };
    System.out.println(Arrays.toString(ids)); // [1, 2, 3, 4, 5]
    // 测试自我复制
    // 把从索引0开始的2个数字复制到索引为3的位置上
    System.arraycopy(ids, 0, ids, 3, 2);
    System.out.println(Arrays.toString(ids)); // [1, 2, 3, 1, 2]
    // 测试复制到别的数组上
    // 将数据的索引1开始的3个数据复制到目标的索引为0的位置上
    int[] ids2 = new int[6];
    System.arraycopy(ids, 1, ids2, 0, 3);
    System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
    // 此功能要求
    // 源的起始位置+长度不能超过末尾
    // 目标起始位置+长度不能超过末尾
    // 且所有的参数不能为负数
    try {
      System.arraycopy(ids, 0, ids2, 0, ids.length + 1);
    } catch (IndexOutOfBoundsException ex) {
      // 发生越界异常,数据不会改变
      System.out.println("拷贝发生异常:数据越界。");
    }
    System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
    // 如果是类型转换问题
    Object[] o1 = { 1, 2, 3, 4.5, 6.7 };
    Integer[] o2 = new Integer[5];
    System.out.println(Arrays.toString(o2)); // [null, null, null, null, null]
    try {
      System.arraycopy(o1, 0, o2, 0, o1.length);
    } catch (ArrayStoreException ex) {
      // 发生存储转换,部分成功的数据会被复制过去
      System.out.println("拷贝发生异常:数据转换错误,无法存储。");
    }
    // 从结果看,前面3个可以复制的数据已经被存储了。剩下的则没有
    System.out.println(Arrays.toString(o2)); // [1, 2, 3, null, null]
  }
}
复制代码

 

分类:  Java基础
本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/4485008.html如需转载请自行联系原作者

demoblog
相关文章
|
1月前
|
存储 缓存 Java
最新Java基础系列课程--Day10-IO流文件处理
最新Java基础系列课程--Day10-IO流文件处理
|
1月前
|
存储 Java
最新Java基础系列课程--Day10-IO流文件处理(一)
最新Java基础系列课程--Day10-IO流文件处理
|
9天前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
58 1
|
19天前
|
搜索推荐 算法 Java
【Java基础】 几种简单的算法排序
几种简单的JAVA算法排序
25 4
|
10天前
|
存储 缓存 Java
Java基础17-读懂Java IO流和常见面试题(二)
Java基础17-读懂Java IO流和常见面试题(二)
21 0
|
10天前
|
存储 Java Unix
Java基础17-读懂Java IO流和常见面试题(一)
Java基础16-读懂Java IO流和常见面试题(一)
19 0
|
1月前
|
Java
Java基础教程(12)-Java中的IO流
【4月更文挑战第12天】Java IO涉及输入输出,包括从外部读取数据到内存(如文件、网络)和从内存输出到外部。流是信息传输的抽象,分为字节流和字符流。字节流处理二进制数据,如InputStream和OutputStream,而字符流处理Unicode字符,如Reader和Writer。File对象用于文件和目录操作,Path对象简化了路径处理。ZipInputStream和ZipOutputStream则用于读写zip文件。
|
1月前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
30 4
|
1月前
|
搜索推荐 算法 Java
Java基础(冒泡排序算法)
Java基础(冒泡排序算法)
23 3
|
1月前
|
存储 Java 数据库
[Java 基础面试题] IO相关
[Java 基础面试题] IO相关