기본형(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의 정석' 책
'Language > Java' 카테고리의 다른 글
[Java] 진법 / 진법 변환(n진수 변환) /실수 진법변환 (0) | 2022.02.25 |
---|---|
[Java] 형식화 출력 printf() & 입력값 받기 Scanner (0) | 2022.02.25 |
[Java] 변수(Variable) (0) | 2022.02.25 |
[Java] 자바 프로그램 실행 과정 (0) | 2022.02.24 |
[Java] 자바언어의 특징과 JVM (0) | 2022.02.24 |
댓글