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

 更新时间:2023年11月18日 11:25:36   作者:五月天的尾巴  
这篇文章主要介绍了Java中的System.arraycopy()浅复制方法详解,Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制,需要的朋友可以参考下

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

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()浅复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java之获取客户端真实IP地址的实现

    Java之获取客户端真实IP地址的实现

    在开发工作中,我们常常需要获取客户端的IP,本文主要介绍了Jav之获取客户端真实IP地址的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java实现特定范围的完数输出算法示例

    Java实现特定范围的完数输出算法示例

    这篇文章主要介绍了Java实现特定范围的完数输出算法,简单说明了完数的概念、计算原理并结合实例形式分析了java针对给定范围内的完数输出操作实现技巧,需要的朋友可以参考下
    2017-12-12
  • 解决Spring boot整合mybatis,xml资源文件放置及路径配置问题

    解决Spring boot整合mybatis,xml资源文件放置及路径配置问题

    这篇文章主要介绍了解决Spring boot整合mybatis,xml资源文件放置及路径配置问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Maven的几个常用plugin

    Maven的几个常用plugin

    本文主要介绍了Maven的几个常用plugin。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • springboot集成activemq的实例代码

    springboot集成activemq的实例代码

    本篇文章主要介绍了springboot集成activemq的实例代码,详细的介绍了ActiveMQ和Spring-Boot 集成 ActiveMQ,有兴趣的可以了解下。
    2017-05-05
  • Java Hibernate中一对多和多对多关系的映射方式

    Java Hibernate中一对多和多对多关系的映射方式

    Hibernate是一种Java对象关系映射框架,支持一对多和多对多关系的映射。一对多关系可以使用集合属性和单向/双向关联来映射,多对多关系可以使用集合属性和中间表来映射。在映射过程中,需要注意级联操作、延迟加载、中间表的处理等问题
    2023-04-04
  • Java中BigDecimal的加减乘除、比较大小与使用注意事项

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作,下面这篇文章给大家介绍了Java中BigDecimal的加减乘除、比较大小与使用注意事项,需要的朋友可以参考下。
    2017-11-11
  • 深入Java Final

    深入Java Final

    本篇文章,小编将为大家介绍Java Final,有需要的朋友可以参考一下
    2013-04-04
  • Springboot实现发送邮件及注册激活步骤

    Springboot实现发送邮件及注册激活步骤

    为了方便邮件发送功能的使用,我们用邮件发送功能实现用户注册,实现步骤大概就是进行用户注册同时发送一封激活邮件,邮件里附带激活链接,关于Springboot发送邮件注册激活功能的实现参考下本文吧
    2021-06-06
  • java-jsp springmvc-controller 传值到页面的方法

    java-jsp springmvc-controller 传值到页面的方法

    下面小编就为大家分享一篇java-jsp springmvc-controller 传值到页面的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03

最新评论