티스토리 뷰

Study !/JAVA

JAVA정리 1. 참조변수

저유 2018. 9. 7. 18:12

참조 타입의 종류는 배열, 열거, 클래스, 인터페이스가 있다.

int, char같은 기본 타입 변수는 스택(Stack) 영역에 직접 값을 갖고 있지만, 참조 타입 변수는 스택 영역에서 값이 아니라 힙 영역(Heap)의 주소값을 가진다. (참조 타입의 실제 값은 힙영역에 생성된다!)


참조 변수의 비교 연산(==, !=)

비교 연산은 기본 타입 변수의 경우 변수의 값이 같은지 아닌지 비교하지만, 참조 타입 변수의 경우 같은 객체를 참조하는지 아닌지 비교하게된다.


null

참조 타입의 변수는 힙 영역의 객체를 참조하지 않는 뜻으로 null값을 가질 수 있다. 이경우 스택 영역에는 변수는 생성하지만 힙 영역에는 객체를 생성하지 않는다.

null을 가지고 있는 참조변수를 사용할경우 NullPointerExcepton 오류가 발생한다.


String

String도 참조 타입이다.

서로 다른 String 변수의 리터럴(값) 이 같을경우 동일한 객체를 참조하게 된다.


 public class Main {	
	public static void main(String[] args) throws IOException {
		
		String name1 = "김자바";
		String name2 = "김자바";
		String name3 = new String("김자바");
		String name4 = "홍길동";
		
		if(name1 == name2) {
			System.out.println("name1와 name2는 참조가 같다");
		}else {
			System.out.println("name1와 name2는 참조가 다르다");
		}
		
		
		if(name1 == name3) {
			System.out.println("name1와 name3는 참조가 같다");
		}else {
			System.out.println("name1와 name3는 참조가 다르다");
		}
		
	
		
		if(name1.equals(name3)) {
			System.out.println("name1와 name3는 문자열이 같다");
		}else {
			System.out.println("name1와 name3는 문자열이 다르다");
		}
		
	}
}

   결과

name1와 name2는 참조가 같다
name1와 name3는 참조가 다르다
name1와 name3는 문자열이 같다 


댓글