Java中的System.arraycopy()方法详解

转载自https://blog.csdn.net/qq_32440951/article/details/78357325


一、深度复制和浅度复制的区别

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

二、System.arraycopy()方法实现复制

1、System中提供了一个native的静态方法arraycopy()。可以使用这个方法来实现数组之间的复制

  • 对于一维数组来说,这种复制属性值传递,修改副本 不会影响原来的值
  • 对于二维或者一维数组中存放的是对象时,复制结果是:一维的引用变量 传递给 副本的一维数组修改副本时,会影响原来的数组


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

public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)

其中:src表示源数组srcPos表示源数组要复制的起始位置destPos  目标数组的起始位置.desc表示目标数组length表示要复制的长度

 

3、利用System.arraycopy实现数组复制的示例:

package com.shuzu;
/*System中提供了一个native方法arraycopy()*/
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
				+ "]";
	}
}

程序运行的结果:

下图是System.arraycopy()复制的过程:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
System.arraycopyJava的一个方法,用于将一个数组的内容复制到另一个数组。它的用法是:System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)。其,src是源数组,srcPos是源数组的起始位置,dest是目标数组,destPos是目标数组的起始位置,length是要复制的元素个数。 System.arraycopy是一种浅拷贝方式,它只是将源数组的引用复制给目标数组,而不会复制源数组的元素的值。因此,如果原始数组改变了,复制的数组也会发生相应的改变。 关于System.arraycopy的具体实现,可以参考引用的源码拜读部分。另外,引用也提到了System.arraycopy是对数组进行复制的常用方法。 在引用的代码示例,可以看到System.arraycopy的具体用法。首先定义了一个二维数组src,然后使用System.arraycopy将src复制给了dest数组。接着,通过修改src数组的元素,可以观察到dest数组也发生了相应的改变,这正是浅拷贝的特性。 总之,System.arraycopyJava用于数组复制的方法,它是一种浅拷贝方式,可以将源数组的内容复制到目标数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [System.arraycopy详解](https://blog.csdn.net/yangruidage21/article/details/128519021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值