欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

System.arraycopy()方法使用详解

程序员文章站 2022-06-19 15:44:24
源码说明: public static native void arraycopy(Object var0, int var1, Object var2, int var3, int var4);参数:var0:要复制的数组var1:要复制的数组起始位置var2:保存数据的目标数组var3:目标数组的下标位置var4:每次复制的长度例如要将Buffer复制到tmpBuffer循环复制 byte[] Buffer = new byte[640];final byte[] tmpBu...

一、深度复制和浅度复制的区别
Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制。

二、System.arraycopy()方法实现复制
1、System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。对于一维数组来说,这种复制属性值传递,修改副本不会影响原来的值。对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组。

2、System.arraycopy的函数原型是:

  public static native void arraycopy(Object var0, int var1, Object var2, int var3, int var4);

参数:
var0:要复制的数组
var1:要复制的数组起始位置
var2:保存数据的目标数组
var3:目标数组的下标位置
var4:每次复制的长度

public class SsytemArrayCopy {  
    public static void main(String[] args) {  
       User [] users=new User[]{
       new User(1,"admin","admin@qq.com"),
       new User(2,"maco","maco@qq,com"),
       new User(3,"kitty","kitty@qq,com")};//初始化对象数组  
       
       User [] target=new User[users.length];//新建一个目标对象数组 
        
       System.arraycopy(users, 0, target, 0, users.length);//实现复制  
       System.out.println("源对象与目标对象的物理地址是否一样:"+(users[0] == target[0]?"浅复制":"深复制"));  
       target[0].setEmail("admin@sina.com"); 
        
       System.out.println("修改目标对象的属性值后源对象users:");  
       for (User user : users){  
           System.out.println(user);  
       }           
    }  
}  
class User{  
    private Integer id;  
    private String username;  
    private String email;  
    //无参构造函数  
    public User() { }  
    //有参的构造函数  
    public User(Integer id, String username, String email) {  
        super();  
        this.id = id;  
        this.username = username;  
        this.email = email;  
    }  
    public Integer getId() {  
        return id;  
    }  
    public void setId(Integer id) {  
        this.id = id;  
    }  
    public String getUsername() {  
        return username;  
    }  
    public void setUsername(String username) {  
        this.username = username;  
    }  
    public String getEmail() {  
        return email;  
    }  
    public void setEmail(String email) {  
        this.email = email;  
    }  
    @Override  
    public String toString() {  
        return "User [id=" + id + ", username=" + username + ", email=" + email  
                + "]";  
    }  
}  

例如
将Buffer复制到tmpBuffer循环复制,每次复制160字节

 byte[]  Buffer = new byte[640];
final byte[] tmpBuffer = new byte[160];
for (int i=0;i<Buffer.length;i+=160){
      System.arraycopy(Buffer, i, tmpBuffer, 0, 160);      
 }

system.arraycopy复制过程
System.arraycopy()方法使用详解

本文地址:https://blog.csdn.net/jiuxin_jiuxin/article/details/111035674

相关标签: java