
기본타입
- 정수, 실수, 문자, 논리 리터럴 저장
- byte, char, short, int, long, float, double
참조 타입
- 객체(object)의 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스
int age = 25;
double price = 100.5
String name = "신용권";
String hobby = "독서";


메소드 영역(Method Area)
- 클래스 별로
- 정적 필드, 상수, 메소드 코드, 생성자 코드 등을 분류해서 저장
힙 영역
- 객체와 배열이 생성되는 영역
JVM 스택 영역
- 메소드가 호출되면 프레임이 추가되고
- 메소드가 종료되면 프레임이 제거됨
int[] scores = {10, 20, 30};


refVar1 == reVar2 //false
refVar1 != reVar2 //true - 참조하는 객체(저장된 번지)가 같음

reVar1 == null //false
reVar2 == null //true
int[] intArray = null;
intArray[0] = 10; //NullPointerException
String str = null;
System.out.println("총 문자 수: "+str.length()); //NullPointException
※ 문자열 리터럴: 따옴표(" ")로 둘러싸인 문자열

String name = "신용권";,
String hobby = "자바";

String name1 = "신용권";,
String name2 = "신용권";

String name1 = new String("신용권");
String name2 = new String("신용권");
String name1 = "신용권";
String name2 = "신용권";
String name3 = new String("신용권");
name1 == name2 //true
name1 == name3 //false
boolean result = str1.equals(str2);
//str1: 원본 문자열, str2: 비교 문자열
String hobby = null;
String hobby = "여행";
hobby = null;

- 기본 타입: byte, short, char, int, long, float, double, boolean 타입
변수에 값 자체를 저장- 참조 타입: 기본 타입을 제외한 배열, 열거, 클래스, 인터페이스
변수에 객체의 번지 저장- 메모리 사용 영역: JVM은 운영체제에서 할당받은 메모리 영역을 메소드 영역, 힙 영역, 스택 영역으로 구분해서 사용
- 번지 비교: 비교 연산자(==,!=)가 기본 타입에서 사용되면 값을 비교하지만 참조타입에서 사용되면 번지를 비교
- null: 참조 변수는 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있음
- NullPointException: 참조 변수가 null 일 때 참조 변수를 통해 존재하지도 않는 객체를 사용하려고 할 경우 발생