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

相关文章

  • idea中的Maven导包失败问题解决方案汇总

    idea中的Maven导包失败问题解决方案汇总

    这篇文章主要介绍了idea中的Maven导包失败问题解决总结,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Java实现文件点击没反应的方法

    Java实现文件点击没反应的方法

    jsp页面链接,点击访问action用IO流去下载服务器上的文件,问题是任凭怎么点击都没反应,日志也不报错。这篇文章给大家介绍Java实现文件点击没反应的方法,需要的朋友参考下吧
    2018-07-07
  • Java8新特性Stream流实例详解

    Java8新特性Stream流实例详解

    Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。这篇文章主要介绍了Java8新特性Stream流的相关资料,需要的朋友参考下吧
    2017-10-10
  • 七个Spring核心模块详解

    七个Spring核心模块详解

    这篇文章主要为大家详细介绍了七个Spring的核心模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 教你安装eclipse2021并配置内网maven中心仓库的图文详解

    教你安装eclipse2021并配置内网maven中心仓库的图文详解

    本文能通过图文并茂的形式给大家介绍安装eclipse2021并配置内网maven中心仓库的相关知识,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-09-09
  • java实现桌球游戏

    java实现桌球游戏

    这篇文章主要为大家详细介绍了java实现桌球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • spring 或者spring boot 调整bean加载顺序的方式

    spring 或者spring boot 调整bean加载顺序的方式

    这篇文章主要介绍了spring 或者spring boot 调整bean加载顺序的方式,本文通过实例代码讲解三种调整类加载顺序的方式,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Spring AbstractRoutingDatasource 动态数据源的实例讲解

    Spring AbstractRoutingDatasource 动态数据源的实例讲解

    本文介绍如何使用 Spring AbstractRoutingDatasource 基于上下文动态切换数据源,因此我们会让查找数据源逻辑独立于数据访问之外
    2021-07-07
  • Java中遍历Map的多种方法示例及优缺点总结

    Java中遍历Map的多种方法示例及优缺点总结

    在java中遍历Map有不少的方法,下面这篇文章主要给大家介绍了关于Java中遍历Map的多种方法,以及各种方法的优缺点总结,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • 什么是Java布隆过滤器?如何使用你知道吗

    什么是Java布隆过滤器?如何使用你知道吗

    这篇文章主要为大家详细介绍了Java布隆过滤器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论