원시타입의 할당 원리
-
-stack 영역
int i; 선언시 -> stack영역에 i라는 공간이 생김.
i = 3; 선언시 ->stack영역의 i라는 공간에 값이 들어감
-
-call by value
int i =3 ;
int j =i;
원시 타입은 stack영역에서 i변수가 만들어지고 3을 대입하고 이후 j가 만들어지면 i의 value를 할당함. 즉 3
참조타입의 할당 원리
-Stack 영역
String s; 선언시 -> stack 영역에 s라는 공간 생성
-heap 영역
s = new String("str"); 선언시 -> 인스턴스(필드와 메서드가 있는 데이터덩어리)생성 -> heap영역에 "str" 생성 -> JVM에 의해서 주소생성 -> 주소값을 stack영역의 s변수에 대입
-
-call by reference
String s = new String("str");
String s1 = s;
참조 타입은 stack 영역에서 s 변수가 만들어지고 heap영역에서 값을 만들고 주소 값을 할당 하고 stack 영역의 참조변수에 주소 할당
s1에 s를 할당하게 되면 stack 영역의 주소값만 복사해서 할당 즉 주소 값만 넘기므로 두 변수는 같은 참조를 하게 됨
-
-String
값을 같은 문자열로 할당하면 같은 참조 값을 가짐
String s ="java";
String s1 = "java";
System.out.println(s == s1); 의 결과는 true, 즉 같은 객체 참조를 가진다.
new 연산자를 사용하면 다른 참조변수가 된다. 즉 다른 주소를 갖는다.
String s2 = new String("java");
System.out.println(s == s2); 의 결과는 false 이다.
public class RefType4 {
// call by reference
private static void change(int[] ar) {
ar[1] = 10;
}
// call by value
private static void print(int k) {
System.out.println(k);
}
public static void main(String[] args) {
int[] arr = new int[3];
int[] arr2 = arr;
arr[0] = 9;
System.out.println(arr[0]);
int i =3;
print(i);
change(arr2);
System.out.println(arr[1]);
}
}
JAVA에서 call by value와 call by reference는 핵심 내용이다.
'JAVA-Basic' 카테고리의 다른 글
6.Interface와 다형성의 구현과정 (0) | 2020.07.10 |
---|---|
5.추상클래스와 상속관계의 Promotion & Casting (0) | 2020.07.10 |
4.상속(Inheritance)과 다형성의 구현과정 (0) | 2020.07.10 |
3.Overloading 과 접근제한(AccessModifier) (0) | 2020.07.10 |
2.Class와 멤버 (0) | 2020.07.10 |