단 하나의 값을 저장할 수 있는 메모리 공간
int age; // age라는 이름의 변수를 선언
변수타입: 변수에 저장될 값이 어떤 타입인지
변수이름: 변수에 붙인 이름 => 메모리 공간에 이름을 붙여주는 것
結論
변수타입-> 메모리의 빈 공간에 알맞은 크기의 저장공간 확보
변수이름-> 저장공간 사용
변수를 선언한 이후부터는 변수를 사용할 수 있으나 그 전에 반드시 변수를 초기화해야 한다.
garbage value가 남아있을 수 있기 때문이다
int a,b;
int x = 0, y = 0;
변수의 초기화란, 변수를 사용하기 전에 처음으로 값을 저장
기본형(primitive type)
참조형(reference type)
boolean형을 제외한 기본형은 연산과 변환이 가능하다
상수는 한 번 값을 저장하면 다른 값으로 변경할 수 없다
final int MAX_SPEED = 10;
상수의 이름은 모두 대문자로 하는 것이 관례다.
리터럴 = 그 자체로 값을 의미하는 것, 상수랑 같은 의미이다.
논리형: false,true 없음
정수형: 123, 0b0101, 077, 0xFF, 100L L
실수형: 3.14, 3.0e8, 1.4f, 0x1.0p-1 f,d
문자형: 없음
문자열: 없음
int octNum = 010;
int hexNum = 0x10;
int binNum = 0b10;
long big = 100_000_000_000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL;
float pi = 3.14f;
double rate = 1.618d;
float타입 리터럴에는 'f'를
double 타입 리터럴에는 'd'를 붙인다
오류!
float pi = 3.14;
double rate = 1.618;
3.14는 접미사가 붙지 않았으므로 float타입 리터럴이 아니라 double타입 리털로 간주된다.
리터럴의 접두사와 접미사는 대문자를 구별하지 않지만 대문자를 사용하는 것이 낫다.
리터럴에서는 10의 제곱을 나타내는 e,f,d를 실수형으로 간주
지정될 변수의 타입과 일치하는 것이 보통이지만 타입이 달라도 저장된 범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용
int i = 'A';
long l = 123;
double d = 3.14f;
BUT 리터럴의 값이 변수의 타입의 범위를 넘어서거나, 리터러의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러가 발생
int i = 0x123456789; //에러 int타입의 범위를 넘는 값 저장
float f = 3.14; // 에러. float 타입보다 double타입의 범위가 넓다
Stirng str = ""; //OK 내용이 없는 빈 문자열
char ch = ''; 에러. ''안에 반드시 하나의 문자가 필요
char ch = ' '; // OK. 공백 문자(blank)로 변수 ch를 초기화
문자열 + any type -> 문자열 + 문자열 -> 문자열
any type + 문자열 -> 문자열 + 문자열 -> 문자열
기본형 타입의 값을 문자열로 변환할 때 아무런 내용 없는 빈 문자열("")을 더하면 된다