Java中的System.arraycopy()浅复制方法详解
一、深度复制和浅度复制的区别
Java数组的复制操作可以分为深度复制和浅度复制
简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制。
二、System.arraycopy()方法实现复制
1、arraycopy()
System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。
对于一维数组来说,这种复制属性值传递,修改副本不会影响原来的值。对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组。
2、System.arraycopy的函数原型
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
其中:src表示源数组,srcPos表示源数组要复制的起始位置,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()复制的过程:
到此这篇关于Java中的System.arraycopy()浅复制方法详解的文章就介绍到这了,更多相关System.arraycopy()浅复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot2 整合Nacos组件及环境搭建和入门案例解析
这篇文章主要介绍了SpringBoot2 整合Nacos组件,环境搭建和入门案例详解,在整合springboot2时注意版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本,具体内容详情跟随小编一起看看吧2022-03-03java8 filter方法、Predicate接口的使用方式
这篇文章主要介绍了java8 filter方法、Predicate接口的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07apollo更改配置刷新@ConfigurationProperties配置类
这篇文章主要为大家介绍了apollo更改配置刷新@ConfigurationProperties配置类示例解析,apollo更改配置刷新@ConfigurationProperties配置类2023-04-04
最新评论