Java中的System.arraycopy()淺復(fù)制方法詳解
一、深度復(fù)制和淺度復(fù)制的區(qū)別
Java數(shù)組的復(fù)制操作可以分為深度復(fù)制和淺度復(fù)制
簡(jiǎn)單來說深度復(fù)制,可以將對(duì)象的值和對(duì)象的內(nèi)容復(fù)制;淺復(fù)制是指對(duì)對(duì)象引用的復(fù)制。
二、System.arraycopy()方法實(shí)現(xiàn)復(fù)制
1、arraycopy()
System中提供了一個(gè)native靜態(tài)方法arraycopy(),可以使用這個(gè)方法來實(shí)現(xiàn)數(shù)組之間的復(fù)制。
對(duì)于一維數(shù)組來說,這種復(fù)制屬性值傳遞,修改副本不會(huì)影響原來的值。對(duì)于二維或者一維數(shù)組中存放的是對(duì)象時(shí),復(fù)制結(jié)果是一維的引用變量傳遞給副本的一維數(shù)組,修改副本時(shí),會(huì)影響原來的數(shù)組。
2、System.arraycopy的函數(shù)原型
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
其中:src表示源數(shù)組,srcPos表示源數(shù)組要復(fù)制的起始位置,desc表示目標(biāo)數(shù)組,length表示要復(fù)制的長(zhǎng)度。
3、示例
利用System.arraycopy實(shí)現(xiàn)數(shù)組復(fù)制
package com.shuzu; /*System中提供了一個(gè)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")};//初始化對(duì)象數(shù)組 User [] target=new User[users.length];//新建一個(gè)目標(biāo)對(duì)象數(shù)組 System.arraycopy(users, 0, target, 0, users.length);//實(shí)現(xiàn)復(fù)制 System.out.println("源對(duì)象與目標(biāo)對(duì)象的物理地址是否一樣:"+(users[0] == target[0]?"淺復(fù)制":"深復(fù)制")); target[0].setEmail("admin@sina.com"); System.out.println("修改目標(biāo)對(duì)象的屬性值后源對(duì)象users:"); for (User user : users){ System.out.println(user); } } } class User{ private Integer id; private String username; private String email; //無參構(gòu)造函數(shù) public User() { } //有參的構(gòu)造函數(shù) 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 + "]"; } }
程序運(yùn)行的結(jié)果:
下圖是System.arraycopy()復(fù)制的過程:
到此這篇關(guān)于Java中的System.arraycopy()淺復(fù)制方法詳解的文章就介紹到這了,更多相關(guān)System.arraycopy()淺復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java之獲取客戶端真實(shí)IP地址的實(shí)現(xiàn)
在開發(fā)工作中,我們常常需要獲取客戶端的IP,本文主要介紹了Jav之獲取客戶端真實(shí)IP地址的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法,簡(jiǎn)單說明了完數(shù)的概念、計(jì)算原理并結(jié)合實(shí)例形式分析了java針對(duì)給定范圍內(nèi)的完數(shù)輸出操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12解決Spring boot整合mybatis,xml資源文件放置及路徑配置問題
這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12springboot集成activemq的實(shí)例代碼
本篇文章主要介紹了springboot集成activemq的實(shí)例代碼,詳細(xì)的介紹了ActiveMQ和Spring-Boot 集成 ActiveMQ,有興趣的可以了解下。2017-05-05Java?Hibernate中一對(duì)多和多對(duì)多關(guān)系的映射方式
Hibernate是一種Java對(duì)象關(guān)系映射框架,支持一對(duì)多和多對(duì)多關(guān)系的映射。一對(duì)多關(guān)系可以使用集合屬性和單向/雙向關(guān)聯(lián)來映射,多對(duì)多關(guān)系可以使用集合屬性和中間表來映射。在映射過程中,需要注意級(jí)聯(lián)操作、延遲加載、中間表的處理等問題2023-04-04Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng)
對(duì)于不需要任何準(zhǔn)確計(jì)算精度的數(shù)字可以直接使用float或double,但是如果需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作,下面這篇文章給大家介紹了Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng),需要的朋友可以參考下。2017-11-11Springboot實(shí)現(xiàn)發(fā)送郵件及注冊(cè)激活步驟
為了方便郵件發(fā)送功能的使用,我們用郵件發(fā)送功能實(shí)現(xiàn)用戶注冊(cè),實(shí)現(xiàn)步驟大概就是進(jìn)行用戶注冊(cè)同時(shí)發(fā)送一封激活郵件,郵件里附帶激活鏈接,關(guān)于Springboot發(fā)送郵件注冊(cè)激活功能的實(shí)現(xiàn)參考下本文吧2021-06-06java-jsp springmvc-controller 傳值到頁面的方法
下面小編就為大家分享一篇java-jsp springmvc-controller 傳值到頁面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03