arraycopy方法的作用_System. arraycopy()入门指南
System. arraycopy()源碼
從它的修飾符native來看,這個方法的源碼是不能透漏給開發(fā)者來看的,因為native修改的方法,是由其它語言來實現(xiàn)的,一般是(C或C++),所以這沒有辦法看到源碼了。
其實我們對于這個方法也不需要了解太多,只要知道它的基本使用就可以了,也就是知道arraycopy()方法里面的幾個參數(shù)都是什么作用就好了
- src參數(shù):源數(shù)組
- srcPos參數(shù):從src數(shù)組的第幾個元素開始賦值
- dest參數(shù):目標(biāo)數(shù)組
- destPos參數(shù):指定從dest數(shù)組的第幾個元素開始。
- length參數(shù):指定從src數(shù)組拿幾個元素來賦值到dest數(shù)組
System. arraycopy()復(fù)制基本數(shù)據(jù)類型
這里以int為標(biāo)準(zhǔn),代碼如下所示
此時結(jié)果如下所示,可以看到上面的代碼把src_arr數(shù)組從索引1開始把2個長度的22,33這兩個元素給放到dest_arr數(shù)組里面的從索引2開始的索引2和索引3這兩個位置上面
System. arraycopy()復(fù)制引用數(shù)據(jù)類型
代碼如下所示
然后此時運(yùn)行結(jié)果如下所示,這里結(jié)果就不多講了,也是復(fù)制成功的
System. arraycopy()復(fù)制引用數(shù)據(jù)類型的淺拷貝問題
當(dāng)使用System. arraycopy()進(jìn)行復(fù)制的時候,拷貝數(shù)組里面的引用對象的時候,是淺拷貝,而不是深拷貝,證明如下
結(jié)果如下所示,此時可以看到dest_arr數(shù)組里面的person對象的company變量和src_arr數(shù)組里面的person對象的company變量是指向同一個地址的,說明在復(fù)制的時候,沒有把src_arr數(shù)組里面的person對象的company變量在重新生成一個對象,所以此時是淺拷貝
既然是淺拷貝了,那么就會有一定的缺點(diǎn),就是如果此時我修改src_arr數(shù)組里面的person對象的company變量里面的address變量地址,那么dest_arr數(shù)組里面的person對象的company變量的address變量地址也會修改了
比如下面的代碼
此時可以看到兩次的獲取dest_arr數(shù)組里面的person對象的company變量的address的值不同了
System. arraycopy()復(fù)制引用數(shù)據(jù)類型變成深拷貝
目前發(fā)現(xiàn)System. arraycopy()復(fù)制引用數(shù)據(jù)類型無法實現(xiàn)深入拷貝,所以目前實現(xiàn)數(shù)組的深拷貝的代碼如下所示
結(jié)果如下所示,此時可以看到,dest_arr數(shù)組里面的person對象的company變量和src_arr數(shù)組里面的person對象的company變量是不指向同一個地址的,所以此時對數(shù)組里面的引用數(shù)據(jù)類型是深入拷貝
總結(jié)
以上是生活随笔為你收集整理的arraycopy方法的作用_System. arraycopy()入门指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 字符串 数组 判断,Pyt
- 下一篇: 夸奖对方代码写的好_怎样写好代码(三)