자바 의 네 가지 복사("얕 은 복사,깊 은 복사"이해)
글 목록
1.'얕 은 복사'와'깊 은 복사'의 차이 점:
얕 은 복사:
원본 대상 의 데이터 형 필드 를 새로운 대상 에 복사 하고 인용 형 필드 의'인용'을 새로운 대상 에 복사 하 며'인용 대상'을 복사 하지 않 기 때문에 원본 대상 과 새로운 대상 이 같은 대상 을 인용 하고 새로운 대상 의 인용 형 필드 가 변화 하면 원본 대상 의 대응 필드 도 변화 할 수 있다.
깊 은 복사:
인용 에 있어 서 다 릅 니 다.깊이 복사 하 는 것 은 원본 필드 와 같은 내용 의 필드 를 만 드 는 것 입 니 다.똑 같은 데이터 세그먼트 이기 때문에 이들 의 인용 은 다 릅 니 다.그 후에 새로운 대상 의 인용 형 필드 가 바 뀌 어 원본 대상 의 필드 가 바 뀌 지 않 습 니 다.
2.네 가지 복사:
1.for()순환 복사
순환 할당 을 통 해 메타 배열 의 요 소 를 대상 배열 로 복사 합 니 다.
2.clone()복사
함수 원형 은:
clone
protected Object clone()
throws CloneNotSupportedException
clone Object 。 , Cloneable , CloneNotSupportedException 。 , Cloneable , T[] clone T[] , T 。 , , , 。 。 , “ ”, “ ” 。
3.System.arraycopy 복사
System 에서 native 정적 방법 인 array copy()를 제공 합 니 다.이 방법 으로 배열 간 의 복 제 를 실현 할 수 있 습 니 다.
함수 원형 은:
arraycopy
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
매개 변수
src
-소스 배열.srcPos
-소스 배열 의 시작 위치.dest
-목표 배열.destPos
-목적지 데이터 의 시작 위치.length
-복사 할 배열 요소 의 수량length
-복사 할 배열 요소 의 수량4.Arrays.copyOf 복사
함수 원형 은:
Arrays.copyOf
public static <T> T[] copyOf(T[] original,
int newLength)
매개 변수 유형
T
-배열 의 대상 클래스매개 변수
original
-복사 할 배열newLength
-되 돌아 갈 던 전의 길이5.대상 은'기본 유형'(코드)
(네 가지 복사 대응 방식 은'딥 복사')
for()순환 복사
//for()
import java.util.*;
public class SimpleCharcter {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9};
int[] brray = new int[array.length];
for(int i = 0;i < array.length;i++) {
brray[i] = array[i];
}
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
brray[0] = 1000;
System.out.println("=================");
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
}
}
/* :
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
=================
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1000, 2, 3, 4, 5, 6, 7, 8, 9] ( )
*/
clone()복사
//clone()
import java.util.*;
public class Clone {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] brray = array.clone();
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
brray[0] = 1000;
System.out.println("=================");
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
}
}
/* :
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
=================
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1000, 2, 3, 4, 5, 6, 7, 8, 9] ( )
*/
System.arraycopy ()
//System.arraycopy()
import java.util.*;
public class System_Arraycopy {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9};
int[] brray = new int[array.length];
System.arraycopy(array,0,brray,0,array.length);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
brray[0] = 1000;
System.out.println("=================");
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
}
}
/* :
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
=================
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1000, 2, 3, 4, 5, 6, 7, 8, 9] ( )
*/
Arrays.copyOf ()
//Arrays.copyOf
import java.util.*;
public class TestArray1 {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9};
int[] brray = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
brray[0] = 1000;
System.out.println("=================");
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(brray));
}
}
/* :
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
=================
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1000, 2, 3, 4, 5, 6, 7, 8, 9] ( )
*/
6.대상 이'참조 형식'(코드)일 때
(네 가지 복사 대응 방식 은'딥 복사')
코드 의 실현 방향:
(얕 은 복사:다 변/깊 은 복사:t2 만 변 함)
import java.util.*;
public class TestArray {
private int val = 10;
public void setVal(int val) {
this.val = val;
}
public int getVal() {
return this.val;
}
public static void print(TestArray[] t1, TestArray[] t2){
for(int i = 0;i < t1.length;i++) {
t2[i] = t1[i];// , t1[i] t2[i] , ,
}
for(int i = 0;i < t1.length;i++) {
System.out.print(t1[i].getVal()+" ");
}
System.out.println();
for(int i = 0;i < t2.length;i++) {
System.out.print(t2[i].getVal()+" ");
}
System.out.println();
System.out.println();
}
for()순환 복사 및 인쇄 결과 코드
//for()
public static void main(String[] args) {
TestArray[] t1 = new TestArray[4];//TestArray
t1[0] = new TestArray();// t1[0]
t1[1] = new TestArray();
t1[2] = new TestArray();
t1[3] = new TestArray();
TestArray[] t2 = new TestArray[4];//t2[0]
print(t1, t2);
t2[0].setVal(100000);
print(t1, t2);
}
/* :
10 10 10 10
10 10 10 10
100000 10 10 10
100000 10 10 10 ( )
*/
clone()
//clone()
public static void main(String[] args) {
TestArray[] t1 = new TestArray[4];
t1[0] = new TestArray();
t1[1] = new TestArray();
t1[2] = new TestArray();
t1[3] = new TestArray();
TestArray[] t2 = t1.clone();//t2[0]
print(t1, t2);
t2[0].setVal(99999);
print(t1, t2);
}
/* :
10 10 10 10
10 10 10 10
99999 10 10 10
99999 10 10 10 ( )
*/
System.arraycopy ()
//System.arraycopy()
public static void main(String[] args) {
TestArray[] t1 = new TestArray[4];
t1[0] = new TestArray();
t1[1] = new TestArray();
t1[2] = new TestArray();
t1[3] = new TestArray();
TestArray[] t2 = new TestArray[4];//t2[0]
System.arraycopy(t1,0,t2,0,t1.length);
print(t1, t2);
t2[0].setVal(88888);
print(t1, t2);
}
/* :
10 10 10 10
10 10 10 10
88888 10 10 10
88888 10 10 10 ( )
*/
Arrays.copyOf ()
//Arrays.copyOf ()
public static void main(String[] args) {
TestArray[] t1 = new TestArray[4];
t1[0] = new TestArray();
t1[1] = new TestArray();
t1[2] = new TestArray();
t1[3] = new TestArray();
TestArray[] t2 = Arrays.copyOf(t1,t1.length);
print(t1, t2);
t2[0].setVal(666666);
print(t1, t2);
/* :
10 10 10 10
10 10 10 10
666666 10 10 10
666666 10 10 10 ( )
*/
2018.10.19/
by 922
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 의 네 가지 복사("얕 은 복사,깊 은 복사"이해)자바 의 네 가지 복사("얕 은 복사,깊 은 복사"이해) 자바 의 네 가지 복사('얕 은 복사,깊 은 복사'이해) 원본 대상 의 데이터 형 필드 를 새로운 대상 에 복사 하고 인용 형 필드 의'인용'을 새로운 대상 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.