본문 바로가기

Programming/자바

생활코딩 자바 - 참조 ?

복제란


new 통해 데이터타입 생성 => 참조형 데이터타입

  •  

public class ReferenceDemo1 {

public static void runValue() {
int a=1; //1을 변수 a에 담음
int b =a; //a의 값 1을 변수 b에 담음
b=2;
System.out.println("runValue, "+a);
}}

//
runValue, 1

참조란

 

  •  

class A{
public int id;
A(int id){
this.id = id;
}
}

public class ReferenceDemo1 {

public static void runValue() {
int a = 1;
int b = a;
b= 2; // 1을 int a에 담음 -> 1을 복제해(결국 각각 다른 1의 값) b에 담음
System.out.println("runValue, "+ a);
}

public static void runReference() {
A a = new A(1); => 기본 데이터타입 (int) 변수값 - new 통해 만드는 데이터타입 변수값 다르게 작동
A b = a;
b.id = 2; //A 인스턴스 생성됨 -> 1. 변수 a는 인스턴스의 위치 알게 됨 -> 2. 변수 b도 인스턴스 주소값 알게됨 -> 3. 인스턴스의 id값을 2로 변경 => 참조(인스턴스를 구분할 수 있는 주소값만 가짐)
System.out.println("runReference, "+a.id);
}

public static void main(String[] args) {
runValue();
runReference();
}}

//
runValue, 1
runReference, 2

참조 - 복제 비교

 


참조는 파일 바로가기 (바로가기 수정= 원본 수정)
복제는 파일 복사 붙여넣기와 유사

 

 

메소드의 매개변수와 참조, 복제

 

  •  

public static void runReference() {
A a = new A(1);
A b = a;
b = new A(2);    //새로 참조할 인스턴스  => a 와 b는 다른 인스턴스를 참조함
System.out.println("runReference, "+a.id);
}

 

//

runValue, 1
runReference, 1

 

  • ???이해어렵


static void _value(int b) {
b=2;
}

static void runValue() {
int a =1;
_value(a);
System.out.println("runValue, "+ a);
}

static void _reference1(A b) {
b = new A(2);
}

static void runReference1() {
A a = new A(1);   //참조, id값: 1
_reference1(a);    // A b = a, b = new A(2) => 새로운 변수 b가 만들어져 A (주소값 2) 참조
System.out.println("runReference1, "+a.id);
}

static void _reference2(A b) {
b.id = 2;
}

static void runReference2() {
A a = new A(1);   //변수 a가 인스턴스 참조
_reference2(a);    //A b = a, b.id = 2   => 변수 b는 a 참조 => a는 new A(1)
System.out.println("runReference2, "+a.id);
}

public static void main(String[] args) {
runValue();
runReference1();
runReference2();
}}

 

//

runValue, 1
runReference1, 1
runReference2, 2

 

 

 

 

 

 

 

 

 

'Programming > 자바' 카테고리의 다른 글

생활코딩 자바 - Collections framework  (0) 2022.04.24
생활코딩 자바 - 제네릭  (0) 2022.04.20
생활코딩 자바 - 상수2 - enum  (0) 2022.04.18
생활코딩 자바 - Object 클래스  (0) 2022.04.18
생활코딩 자바 - 예외  (0) 2022.04.12