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()浅复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
教你安装eclipse2021并配置内网maven中心仓库的图文详解
本文能通过图文并茂的形式给大家介绍安装eclipse2021并配置内网maven中心仓库的相关知识,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2021-09-09spring 或者spring boot 调整bean加载顺序的方式
这篇文章主要介绍了spring 或者spring boot 调整bean加载顺序的方式,本文通过实例代码讲解三种调整类加载顺序的方式,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-03-03Spring AbstractRoutingDatasource 动态数据源的实例讲解
本文介绍如何使用 Spring AbstractRoutingDatasource 基于上下文动态切换数据源,因此我们会让查找数据源逻辑独立于数据访问之外2021-07-07
最新评论