변수와 자료형 (원시 타입 vs 참조 타입)
자바는 아주 엄격한 타입 시스템을 가집니다. 변수에는 크게 원시 타입(Primitive Type)과 참조 타입(Reference Type) 두 가지가 있습니다.
int, double, boolean 같은 원시 타입은 데이터 그 자체가 Stack(스택) 메모리에 직접 저장됩니다. 빠르고 가볍습니다. 반면 String이나 개발자가 만든 Class 객체 같은 참조 타입은 실제 데이터가 Heap(힙) 메모리에 저장되고, Stack에는 그 Heap 메모리의 '주소(리모컨)'만 보관됩니다.
public class Main {
public static void main(String[] args) {
// 1. 원시 타입 (Primitive Type)
// 값 자체가 Stack 메모리에 저장됩니다.
int age = 30;
double height = 175.5;
boolean isStudent = false;
// 2. 참조 타입 (Reference Type)
// 실제 데이터는 Heap에, 변수(name)에는 Heap의 주소가 담깁니다.
String name = new String("Minstudio");
// 자바에서 문자열은 특별 취급되어, new 없이도 생성 가능합니다. (String Pool)
String job = "Developer";
// 3. 참조 타입의 주의점 (주소 비교 vs 값 비교)
String a = new String("Java");
String b = new String("Java");
// == 연산자는 '주소'를 비교합니다. (false)
System.out.println("a == b : " + (a == b));
// .equals() 메서드는 실제 '값'을 비교합니다. (true)
System.out.println("a.equals(b) : " + a.equals(b));
}
}