Java中的System.arraycopy()淺復制方法詳解
一、深度復制和淺度復制的區(qū)別
Java數(shù)組的復制操作可以分為深度復制和淺度復制
簡單來說深度復制,可以將對象的值和對象的內(nèi)容復制;淺復制是指對對象引用的復制。
二、System.arraycopy()方法實現(xiàn)復制
1、arraycopy()
System中提供了一個native靜態(tài)方法arraycopy(),可以使用這個方法來實現(xiàn)數(shù)組之間的復制。
對于一維數(shù)組來說,這種復制屬性值傳遞,修改副本不會影響原來的值。對于二維或者一維數(shù)組中存放的是對象時,復制結(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ù)組要復制的起始位置,desc表示目標數(shù)組,length表示要復制的長度。
3、示例
利用System.arraycopy實現(xiàn)數(shù)組復制
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];//新建一個目標對象數(shù)組
System.arraycopy(users, 0, target, 0, users.length);//實現(xiàn)復制
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;
//無參構(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()復制的過程:

到此這篇關(guān)于Java中的System.arraycopy()淺復制方法詳解的文章就介紹到這了,更多相關(guān)System.arraycopy()淺復制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis中String字符串和sdshdr結(jié)構(gòu)體超詳細講解
這篇文章主要介紹了Redis中String字符串和sdshdr結(jié)構(gòu)體,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-04-04
Java數(shù)據(jù)結(jié)構(gòu)之鏈表的增刪查改詳解
在這篇文章中,小編將帶大家了解一下Java數(shù)據(jù)結(jié)構(gòu)中鏈表的增刪查改(以下結(jié)果均在IDEA中編譯)希望在方便自己復習的同時也能幫助到大家2022-09-09
Java如何將文件內(nèi)容轉(zhuǎn)換為MD5哈希值
這篇文章主要介紹了Java如何將文件內(nèi)容轉(zhuǎn)換為MD5哈希值的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05

