본문 바로가기
Language/Java

[Java] 기본형(Primitive type) & 상수와 리터럴(constant & literal)

by 계범 2022. 2. 25.

기본형(Primitive type)

기본형은 모두 8개의 타입이 있음

 

분류 타입
논리형 boolean
문자형 char(String은 클래스로 참조형임)
정수형 byte, short, int, long
실수형 float, double

 

문자형 char는 내부적으로 정수로 저장함.(자세한 것은 아스키코드(askii code) 참조)

 

자료형 저장 가능한 값의 범위 bit단위 크기 byte단위 크기
boolean false, true 8 1
char '\u0000' ~ '\uffff'(0~2^16-1, 0~65535) 16 2
byte -128~127(-2^7 ~ 2^7-1) 8 1
short -32,768 ~ 32,767(-2^15 ~ 2^15-1) 16 2
int -2,147,483,648 ~ 2,147,483,647(-2^31 ~ 2^31-1) 32 4
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807(-2^63 ~ 2^63-1) 64 8
float -3.402932347e+38~+3.40292347e+38 32 4
double -179769313486231570e+308~1.79769313486231570e+08 64 8

 

int타입의 변수는 대략 10자리 수(약 20억) 저장

long타입은 19자리

 

실수형은 정수형과 저장형식이 달라서 오차가 발생할 수 있다는 단점이 있음.

그래서 정밀도가 중요한데, float은 정밀도가 7자리. double은 15자리까지 오차없이 저장할 수 있음.

 

상수와 리터럴(constant & literal)

상수(constant)

상수는 변수와 마찬가지로 값을 저장할 수 있는 공간이지만, 변수와 달리 값을 저장하면 다른 값으로 변경 불가.

 

선언방법은 'final' 키워드를 변수의 타입 앞에 붙여주면 됨.

final int MAX_SPEED = 10; // 상수 MAX_SPEED를 선언 & 초기화

 

상수는 선언과 동시에 초기화야하고,

그 후 값 변경이 불가하다.

 

상수의 이름은 모두 대문자로 하고, 여러 단어가 이루어져있는 경우 '_'로 구분함.

 

리터럴(literal)

리터럴은 변수나 상수에 저장할 값을 의미.

int year = 2014;
final int MAX_VALUE = 100;

// year 은 변수, MAX_VALUE는 상수
// 2014, 100 은 리터럴

 

리터럴에도 타입이 있음.

타입에따라 접미사를 붙여서 저장해야함.

 

타입 접미사
boolean 없음
byte, short, int, char(내부적으로 정수형 저장) 없음(int형 리터럴로 저장)
long l(L)
float f(F)
double d(D)

 

정수형에선 default가 int, 실수형에선 double

 

//문제상황

float pi = 3.14; // default가 double인데 float에 저장할 수 없으므로, 에러 발생

 

리터럴의 타입과 변수의 타입은 일치하는게 일반적.

타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용됨.

변수 타입의 범위를 넘어가는 것은 저장 불가.

 

int i = 'A'; // char 'A'는 정수형으로는 65이므로, 65가 저장됨.
long i = 123; // long타입의 범위가 더 넓으므로 저장가능
double d = 3.14f; // double타입이 범위가 더 넒으므로 저장 가능

 

문자 리터럴과 문자열 리터럴

문자 리터럴 char타입은 단 하나의 문자만 저장.

문자열 리터럴 String타입은 여러 문자 저장 가능.

 

String은 빈 문자열 가능 ,char는 빈 문자 불가

String은 클래스이므로 원래는 객체 생성 연산자 new를 사용해야하지만, 위와 같은 표현도 허용함.

String str = ""; // 빈 문자열 가능
char ch = ''; // 불가
char ch = ' '; // 공백이라는 문자가 들어간것이므로 가능(' '는 정수형으로 32)

 

문자형은 덧셈 연산자를 이용하여 문자열을 결합 가능

String name = "ja" + "va"; // "java"

String str = name + 8.0;  // "java8.0"
// 어떤 타입이든 문자열과 더하는 순간, 타입을 문자열로 바꾼 후에 더하기 연산을 진행함.

// 7 +"" = "7"
// ""이 문자열타입이기때문에 이런 결과가 나옴.
// 기본형 타입의 값을 문자열로 변환할때 많이 씀.

 

참조

'Java의 정석' 책

댓글