Java中的System.arraycopy()淺復制方法詳解
一、深度復制和淺度復制的區(qū)別
Java數組的復制操作可以分為深度復制和淺度復制
簡單來說深度復制,可以將對象的值和對象的內容復制;淺復制是指對對象引用的復制。
二、System.arraycopy()方法實現復制
1、arraycopy()
System中提供了一個native靜態(tài)方法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()淺復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Spring boot整合mybatis,xml資源文件放置及路徑配置問題
這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Java中BigDecimal的加減乘除、比較大小與使用注意事項
對于不需要任何準確計算精度的數字可以直接使用float或double,但是如果需要精確計算的結果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進行大數的操作,下面這篇文章給大家介紹了Java中BigDecimal的加減乘除、比較大小與使用注意事項,需要的朋友可以參考下。2017-11-11
java-jsp springmvc-controller 傳值到頁面的方法
下面小編就為大家分享一篇java-jsp springmvc-controller 傳值到頁面的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03

