코딩테스트 준비를 하다 자꾸 에러가 났는데, 원인은 Int의 오버플로로 인한 문제였다. 무지의 먹방 라이브
primitive data type은 자바에서 기본적으로 제공하는 타입으로 기본값이 있어 Null이 되지 않는다.
type | memory | default | range |
---|---|---|---|
byte | 1byte | 0 | -128 ~ 127 |
short | 2byte | 0 | -32,768 ~ 32,767 (약 3만) |
int | 4byte | 0 | -2,147,483,648 ~ 2,147,483,647 (-2^31 ~ 2^31 - 1)(약 21억) |
long | 8byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (-2^63 ~ 2^63 - 1) |
float | 4byte | 0.0F | 1.4 * 10^-45 ~ 3.4 * 10 ^ 38 |
double | 8byte | 0.0 | 4.9 * 10^-324 ~ 1.7 * 10^308 |
boolean | 1byte | false | true, false |
char | 2byte | '\u0000' | 0 ~ 65,535 |
정밀한 계산을 위해선 float과 double보단 BigDecimal을 사용하는 것이 좋다고 한다.
Primitive Type을 제외한 모든 타입들이 참조 타입이다. Primitive Type과는 달리 Null이 할당될 수 있으므로 주의해야 한다.
자바에서는 실제 메모리 주소를 참조하는 것(다이렉트 레퍼런스)가 아닌 참조하는 대상의 이름을 참조한다(심볼릭 레퍼런스).
(어떤 장점이 있는 것일까?)
int를 wrapping한 Integer 등 Primitive type을 랩핑한 클래스들이 있다. 랩핑 클래스에는 여러가지 메서드들이 포함되어 있어, 사용성이 좋다.
하지만 랩핑 클래스에서 원시타입으로 변경(언박싱)하는 과정이 필요하기 때문에, 접근속도가 조금 느려질 수 있고, 메모리 측면에서도 원시타입이 유리하다.
(하지만 큰 차이는 없지 않을까? 싶다.)
JVM과 관련된 이야기들이 많이 있는데 자바에 대해 한번 공부해봐야겠다.