728x90
어떤 값의 유형 및 종류를 의미
타입에 따라 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식이 결정된다.
- 값이 차지하는 메모리 공간의 크기
- ex) 정수형 타입 : 4byte, 문자형 타입 : 1byte
- 값이 저장되는 방식
- 기본 타입 : 저장하고자 하는 값을 그대로 저장 : 정수 타입, 실수 타입, 문자 타입, 논리 타입
- 참조 타임 : 저장하고자 하는 값을 임의의 메모리 공간에 저장한 후, 그 메모리 공간의 주소를 저장 : 기본을 제외한 나머지
public class Main {
public static void main(String[] args) {
int a = 1;
String[] b = new String[3];
System.out.println(a); // 1 출력
System.out.println(b); // 주소값 출력
}
}
정수 타입
타입 | 메모리 | 표현 범위 |
byte | 1byte | -128(-2^7) ~ 127(2^7 - 1) |
short | 2byte | -32,768(-2^15) ~ 32,767(2^15 - 1) |
int | 4byte | -2,147,483,648(-2^31) ~ 2,147,483,647(2^31 - 1) |
long | 8byte | -9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,807(2^63 - 1) |
// 각 데이터 타입의 표현 범위에 맞는 값을 할당하고 있습니다.
byte byteNum = 123;
short shortNum = 12345;
int intNum = 123456789;
long longNum = 12345678910L;
// 각 데이터 타입의 표현 범위에 벗어난 값을 할당하고 있어 에러가 발생합니다.
byte byteNum = 130;
short shortNum = 123456;
int intNum = 12345678910;
// 숫자가 길면 언더바로 구분할 수 있습니다.
int intNum = 12_345_678_910;
long longNum = 12_345_678_910L;
정수 값의 오버플로우와 언더플로우
코드를 실행하다 보면 값이 각 타입의 표현 범위를 넘어서는 경우가 있다
예를 들어 byte 형 값 127에 1을 더하면 128이 되어 byte의 표현 범위를 넘어선다
그러면 128이 아닌 -128이 되는 오버플로우가 발생.
public class Main {
public static void main(String[] args) {
byte a = 127;
a += 1;
System.out.println(a); // -128 출력
}
}
언더플로우는 반대
public class Main {
public static void main(String[] args) {
byte a = -128;
a -= 1;
System.out.println(a); // 127 출력
}
}
실수 타입
타입 | 메모리 | 표현 범위 | 정밀도 |
float | 4byte | 음수 : -3.4 * 10^38 ~ -1.4 * 10^-45 양수 : 1.4 * 10^-45 ~ 3.4 * 10^38 |
7자리 |
double | 8byte | 음수 : -1.8 * 10^308 ~ -4.9 * 10^-324 양수 : 4.9 * 10^-324 ~ 1.8 * 10^308 |
15자리 |
// float형 리터럴을 float형 변수에 할당
float num1 = 3.14f;
// double형 리터럴을 double형 변수에 할당
double num2 = 3.141592d;
double num2 = 3.141592;
실수형의 오버플로우와 언더플로우
실수형도 오버플로우와 언더플로우가 발생한다. 하지만 실수와는 조금 다름
- 오버플로우
- 값이 음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때 발생, 이때 값은 무한대가
- 언더플로우
- 값이 음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때 발생, 이 때 값은 0
논리 타입
boolean / 1byte / true, false /
1byte?? : 단순히 참과 거짓을 표현하기 위해서는 1bit만 있으면 되지만, JVM이 다룰 수 있는 데이터의 최소 단위가 1byte이다
boolean a = true;
boolean b = false;
문자 타입
char / 2byte / 유니코드로 문자를 저장
문자 타입은 오직 한 가지
char a1 = 'a';
char a2 = 'ab'; // 에러 : 단 하나의 문자만 할당할 수 있음
char a3 = "a"; // 에러 : 작은 따옴표를 사용해야함
728x90
'개발일지 > Java' 카테고리의 다른 글
Java String 클래스의 메서드 (0) | 2022.09.04 |
---|---|
Java 문자열(String) (0) | 2022.09.04 |
Java 타입 변환 (0) | 2022.09.04 |
Java 변수, 상수 (0) | 2022.09.04 |
Java (0) | 2022.09.04 |