JAVA의 기본 자료형(Primitive Types)은 다음 8가지이다
| 종류 | 자료형 | 크기 | 예시 |
|---|---|---|---|
| 정수형 | byte | 1 byte | -128 ~ 127 |
short | 2 bytes | -32,768 ~ 32,767 | |
int | 4 bytes | -2^31 ~ 2^31-1 | |
long | 8 bytes | -2^63 ~ 2^63-1 | |
| 문자형 | char | 2 bytes | '\u0000' ~ '\uffff' (유니코드) |
| 실수형 | float | 4 bytes | 32bit 부동소수점 |
double | 8 bytes | 64bit 부동소수점 | |
| 논리형 | boolean | 1bit(논리적 의미) | true / false |
JAVA 10부터 도입된 지역 변수 타입 추론 키워드다.
var a = 10; // int로 추론됨
a = "hello"; // ❌ 컴파일 에러
기본적으로 작은 범위 -> 큰 범위로 자동 형변환이 발생

long은 8byte고 float는 4byte인데 왜 더 크다고 인식되는가?
=> 이는 long의 표현 방식과 float의 표현방식의 차이가 나서 그렇다.
long(정수 표현)은 첫 1bit를 부호로, 나머지는 숫자를 표현하는 bit로 사용된다.
반면 float(부동소수점 방식)는 부호 1bit + 지수 8bit + 숫자 23bit로 기록되고, 지수는 우리가 아는 제곱이다.
=> 숫자 2^n으로 기록한다는 소리이다.
그러므로 float의 범위는 long보다 커지게 되고 묵시적 형변환이 가능해지는 것이다.
예: Float.MAX_VALUE ≈ 3.4 10^38 > Long.MAX_VALUE ≈ 9.2 * 10^
String은 객체(참조형)이며, 불변이다.(문자열 공유 중, 데이터가 변경될 위험이 없다는 것이 장점)
String str = "Hello";
str += " World"; // 새로운 문자열 객체가 생성되고 str이 그것을 참조함
String str1 = null; // str1은 아무 객체도 참조 하지 않았다.
String str2 ; // 선언만 함, 초기값이 없음 => 사용 전 초기화 필수
str1과 str2는 다르다.
1. str1 = null;
=> 이 상태에서 str1.length() 등 호출하면 NullPointerException 발생.
| 구분 | 의미 | 사용 가능 여부 | 예외 여부 |
|---|---|---|---|
str1 = null; | 명시적 null 참조 | 사용 가능 (컴파일 가능) | 런타임에 NPE 발생 가능 |
String str2; | 선언만 됨 (초기화 안 됨) | 사용 불가능 (컴파일 에러) | 예외 전에 컴파일 실패 |
아까 나온 기본 자로형을 객체로 포장한 Wrapper Class가 있다.
| 기본형 | 래퍼 클래스 |
|---|---|
int | Integer |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |