01. 값 복사
- 변수를 서로 대입하거나 파라미터로 사용
1) 기본 자료형 간의 대입
단순 복사이므로 복사 후 원본이 변경되더라도 복사본에는 영향 없음. (반대도 마찬가지임)
public class Note7
{
public static void main(String[] args)
{
int a = 50; // 원본
int b = a; // 복사본
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("----------");
a += 50; // 원본 수정
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("----------");
b -= 50; // 복사본 수정
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
// 실행결과
a=50
b=50
----------
a=100
b=50
----------
a=100
b=0
02. 참조 복사
-
배열을 서로 대입하거나 파라미터로 사용할 경우
1) 배열간의 대입
-
배열의 변수 이름에 원소들을 참조시키기 때문에 복사본을 수정할 경우 원본도 수정됨. (반대의경우도 마찬가지)
public class Note8
{
public static void main(String[] args)
{
int[] origin = {1, 2};
int[] copy = origin;
System.out.println("origin[0]=" + origin[0]);
System.out.println("origin[1]=" + origin[1]);
System.out.println("copy[0]=" + copy[0]);
System.out.println("copy[1]=" + copy[1]);
System.out.println("----------");
copy[0] += 100;
copy[1] += 200;
System.out.println("origin[0]=" + origin[0]);
System.out.println("origin[1]=" + origin[1]);
System.out.println("copy[0]=" + copy[0]);
System.out.println("copy[1]=" + copy[1]);
}
}
// 실행결과
origin[0]=1
origin[1]=2
copy[0]=1
copy[1]=2
----------
origin[0]=101
origin[1]=202
copy[0]=101
copy[1]=202
2) 배열을 값 복사 형태로 복사하는 방법
- 배열의 각 원소를 하나하나 복사한다.
public class Note9
{
public static void main(String[] args)
{
int[] origin = {1, 2};
// 원본과 동일한 사이즈의 배열 생성
int[] copy = new int[origin.length];
// 각각의 원소를 개별적으로 복사해야 한다.
copy[0] = origin[0];
copy[1] = origin[1];
System.out.println("origin[0]=" + origin[0]);
System.out.println("origin[1]=" + origin[1]);
System.out.println("copy[0]=" + copy[0]);
System.out.println("copy[1]=" + copy[1]);
System.out.println("----------");
// 복사본을 수정하더라도 원본의 변화가 없다.
copy[0] += 100;
copy[1] += 200;
System.out.println("origin[0]=" + origin[0]);
System.out.println("origin[1]=" + origin[1]);
System.out.println("copy[0]=" + copy[0]);
System.out.println("copy[1]=" + copy[1]);
}
}
// 실행결과
origin[0]=1
origin[1]=2
copy[0]=1
copy[1]=2
----------
origin[0]=1
origin[1]=2
copy[0]=101
copy[1]=202
* 위 소스 코드를 간단하게 할 수 있음.
System.arraycopy(원본배열, 원본의 복사 시작 위치, 복사될 배열, 복사가 시작될 위치, 복사할 값의 길이);
public class ArrayCopy3 {
public static void main(String[] args) {
int[] origin = {1, 2, 3, 4, 5};
// 원본과 동일한 사이즈의 배열 생성
int[] copy = new int[origin.length];
// origin의 0번째 부터 copy의 1번째에 3칸을 복사
System.arraycopy(origin, 0, copy, 1, 3);
for (int i=0; i<origin.length; i++) {
System.out.printf("origin[%d]=%d \t copy[%d]=%d\n",
i, origin[i], i, copy[i]);
}
System.out.println("-----------");
// 주로 다음과 같이 사용됨
System.arraycopy(origin, 0, copy, 0, origin.length);
for (int i=0; i<origin.length; i++) {
System.out.printf("origin[%d]=%d \t copy[%d]=%d\n",
i, origin[i], i, copy[i]);
}
}
}
// 실행결과
origin[0]=1 copy[0]=0
origin[1]=2 copy[1]=1
origin[2]=3 copy[2]=2
origin[3]=4 copy[3]=3
origin[4]=5 copy[4]=0
-----------
origin[0]=1 copy[0]=1
origin[1]=2 copy[1]=2
origin[2]=3 copy[2]=3
origin[3]=4 copy[3]=4
origin[4]=5 copy[4]=5
'JAVA' 카테고리의 다른 글
JAVA(클래스, 객체, 생성자) (0) | 2020.06.04 |
---|---|
JAVA(재귀함수) (0) | 2020.06.04 |
JAVA(메서드) (0) | 2020.06.03 |
JAVA(2차 배열) (0) | 2020.06.02 |
JAVA(1차 배열) (0) | 2020.06.02 |
댓글