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