ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] data type : 원시형과 참조형의 차이
    Programming🧑‍💻/Java 2022. 9. 28. 23:10

    - 참조형(Reference type)

    // String class로 "java"라는 문자열을 객체를 만든뒤 
    // language 변수는 만든 객체를 참조한다. 
    String language = new String("java");

    - 원시형(primitive type)

    // 변수 a에 값 1을 저장한다. 
    int num = 100;

     

    변수에 값을 지정할 때

    • 변수를 지정 시 Stack 영역에 변수가 올라간다.  
    • 원시형 변수를 사용하면 Stack 상에서 변수가 값을 지니고 있다. 
    • "new" 키워드를 사용하여 클래스를 통해 객체를 만들면 Heap 영역에 생성한 객체에 대한 메모리가 할당되어 저장된다
    • 참조형 변수를 사용하면 원시형 변수가 Stack 상에 값을 가지고 있는 것과 달리 객체가 저장되어 있는 Heap의 메모리 주소를 가진다. 

     

    출처: https://hyperskill.org/learn/step/5035

     

    변수를 복사할 때 

    // a는 원시형 변수
    int a = 100;
    int b = a; 
    
    // language는 참조형 변수
    String language = new String("java");
    String java = language;
    • 원시형 변수는 변수가 값을 가지고 있기 때문에 기존의 변수를 새로운 변수에 할당하면 새로운 변수는 기존의 변수의 값을 똑같이 가짐
    • 참조형 변수는 값이 아닌 객체의 주소를 가지고 있기 때문에 새로운 변수는 기존 변수가 갖는 객체의 주소를 복사해 갖는다.
      • 즉 새로운 변수는 새로운 객체를 가리키는 것이 아니라 기존 Heap상에 있던 객체를 가리킨다.

     

    출처: https://hyperskill.org/learn/step/5035

     

    변수를 비교할 때 ( == )

    String s1 = new String("java");
    String s2 = new String("java");
    String s3 = s2;
    
    System.out.println(s1 == s2); // false
    System.out.println(s2 == s3); // true
    • ' == '를 사용하여 참조형 변수를 비교할 때 값이 아닌 변수가 가리키고 있는 메모리 주소를 비교한다
    • s2와 s3는 동일한 객체 주소를 가지고 (가리키고) 있기 때문에 '==' 사용 시 true  
    • s1과 s2가 가리키고 있는 문자열 객체는 'java'로 동일하지만 서로 다른 객체를 가리키고 있기 때문에 '==' 사용시 false

    출처: https://hyperskill.org/learn/step/5035


    'Programming🧑‍💻 > Java' 카테고리의 다른 글

    [JAVA] 컴퓨터와 자바 메모리에 대한 이해  (0) 2023.03.07
    [JAVA] String Constant Pool은 무엇일까?  (0) 2022.12.17
    [JAVA] final  (0) 2022.10.25
    [JAVA] static  (0) 2022.10.21
    [JAVA] Enums  (0) 2022.10.08

    댓글

Designed by Tistory.