Primitive type vs Reference type
Primitive type
Java에는 타입을 크게 두가지로 나눌 수 있습니다. 그 중에 딱 8가지 타입(int, char, boolean, byte, long, short, float, double)이 속하는 primitive타입은 직접 값을 저장합니다.
stack영역에 저장되고 참조형이 아니기때문에 null을 넣을 수 없습니다. null을 넣고싶다면 wrapper class로 만들어줘야합니다.
Reference type
Java에서 위에 8가지 primitive type을 제외한 모든 타입(사용자 정의 클래스, array, interfeace...)이 reference type에 속합니다. 실제 값은 heap영역에 저장되며 그 주소가 stack영역에 변수에 저장됩니다. 즉 변수자체에는 값이 아니라 주소가 저장됩니다.
따라서 ==연산(변수의 값비교)을 할 경우 같은 값이라고 true가 나오는게 아니어서 equals()를 이용해야합니다.
예제
int num = 3; // primitive type
List<Integer> arr = new ArrayList<>(Arrays.asList(2,3,4)); // reference type