참조 타입(reference type)

  • 참조 타입의 종류: 배열, 열거, 클래스, 인터페이스

  • 참조 타입 변수는 스택(stack) 영역에 생성되어 힙(heap) 메모리 영역의 번지(주소)를 값으로 갖는다.

  • 주소를 통해 객체를 참조한다는 뜻에서 참조 타입이라고 부른다.

참조 변수의 ==, != 연산

  • 참조 타입 변수들 간의 ==, != 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용된다.

  • 서로 다른 객체를 참조하는 참조 타입 변수들간의 비교는 기본 타입과 다른 결과를 나타낸다.

  • 예)

int x = 3;
int y = 3;
String hello = new String("안녕하세요");
String hi = new String("안녕하세요");

if ( hello == hi ) {
    System.out.println("안녕하세요.");
} else if ( hello != hi) {
    System.out.println("안녕 못해요.");
}

if (x == y) {
   System.out.println("X와 y는 같습니다.");
} else if ( x != y) {
   System.out.println("x와 y는 다릅니다.");
}
  • 출력
  • 안녕 못해요.
    x와 y는 같습니다.
    

참조 타입 변수의 null

  • 참조 타입 변수가 null 값을 가질 경우 참조할 객체가 없으므로 객체는 힙 메모리 영역에 생성되지 않고, 변수만 스택 영역에서 생성되어 null 값을 가진다.
  • 따라서, null 값을 가진 참조 타입 변수의 ==, != 연산은 기본 타입과 동일하다.
  • 참조 타입 변수가 null 값을 가진 상황에서 프로그램을 실행할 경우 (혹은 프로그램 실행 중 참조 타입 변수가 null 값을 가질 경우) NullPointerException 예외가 발생한다.

String 타입

  • 문자열을 저장하는 참조 타입

  • 자바에서 String은 문자열 리터럴이 동일할 경우 객체를 공유하도록 되어 있다. (new 연산자로 새로운 객체를 생성하지 않고 = 대입 연산자로 같은 문자열을 저장할 경우)

  • String 객체의 equals() 메소드를 사용해서 객체에 상관없이 문자열을 비교할 수 있다.

  • 형식

    String x; // 기본값은 null
    x = "hello"; // 선언한 x에 문자열 값을 대입, " " (쌍따옴표) 사용
    String  y = "hello"; // 선언과 동시에 문자열 저장 x == y 는 true
    String  z = new String("hello"); // 새로운 객체 생성, y == z 는 false
    if ( y.equals(z) ) {
       System.out.println("true"); // true 출력
    }



+ Recent posts