이전 포스팅에서 설명한 것 처럼 자바의 타입은 크게 기본 타입과 참조 타입으로 분류된다.
기본 타입에 대한 보충 설명은
2022.04.24 - [Java] - [혼공자] java - 데이터 타입 기본형(Primitive Type)과 타입 변환
참조 타입이란?
객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다.
기본 타입으로 선언된 변수의 가장 큰 차이점은 저장되는 값이다.
Primitive Type은 Stack 영역 내부 변수에 실제 값을 저장하고 있지만,
Reference Type은 Heap 영역의 객체 번지 값을 변수 안에 저장한다. 이처럼 번지를 통해 객체를 참조한다.
본격적으로 참조 타입을 알아보기 전 JVM이 사용하는 메모리 영역에 대해서 먼저 알아보자.
2022.04.24 - [Java] - [혼공자] java 메모리 사용 영역(Runtime Data Area)
참조 변수의 ==, != 연산
기본 타입 변수의 ==, != 연산 => 변수의 값이 같은지?
참조 타입 변수의 ==, != 연산 => 동일한 객체를 참조하는지?(=동일한 번지 값을 갖고 있는지?)
따라서 동일한 객체를 참조하는 경우 == 연산의 결과는 true, != 연산의 결과는 false이다.
null과 NullPointerException
참조 타입 변수가 힙 영역의 객체를 참조하지 않을 때 null(널)값을 가진다.
참조 변수가 null 값을 가지는지 확인하려면 ==, != 연산을 수행하면 된다.
프로그램 실행 도중에 발생하는 오류를 예외(Exception)라고 부르는데, 참조 변수를 사용하면서 가장 많이 발생하는 예외 중 하나로 NullPoniterException이 있다.
참조 변수가 null 값을 가질 땐 참조 객체가 없으므로 변수를 통해 객체를 사용할 수 없다.
String Type
자바에서 문자열은 String 객체로 생성되고, 변수는 String 객체를 참조한다. 일반적으로 String 변수에 저장한다고 표현한다.
1
2
3
4
|
String var1; // 변수 선언
var1 = ""; // 선언 후 초기화
String var2 = ""; // 변수 선언과 동시에 초기화
|
cs |
문자열 리터럴이 동일하다면 String 객체를 공유하게 되어있다.
1
2
3
4
|
String var1 = "java";
String var2 = "java";
var1 == var2 // true
|
cs |
일반적으로 변수에 문자열을 저장할 때 문자열 리터럴을 사용한다.
new 연산자를 사용해 직접 String 객체를 생성시키기도 한다. 이때 new 연산자는 객체 생성 연산자라고 한다.
1
2
3
4
|
String var1 = new String("java");
String var2 = new String("java");
var1 == var2 // false
|
cs |
이 경우에는 new 연산자로 String 객체를 별도로 생성했기 때문에 다른 객체를 참조하여 == 연산 수행시 false가 나온다.
String 객체들의 내부 문자열을 비교할 때는 String 객체의 equals() 메소드를 사용한다.
'개발 관련 > Java' 카테고리의 다른 글
[혼공자] java - Class #01 클래스 특징과 구성 멤버 (0) | 2022.04.24 |
---|---|
[혼공자] java - 배열(Array) (0) | 2022.04.24 |
[혼공자] java 메모리 사용 영역(Runtime Data Area) (0) | 2022.04.24 |
[혼공자] java - 기본 타입(Primitive Type)과 타입 변환 (0) | 2022.04.24 |
[혼공자] 자바 프로그램 실행 과정 (0) | 2022.04.24 |