1) 변수의 타입은 저장할 값의 타입에 의해 결정된다.
2) 저장할 값의 타입과 일치하는 타입으로 변수를 선언
char ch = '가'; //char는 문자타입
double pi = 3.14; //double은 실수 타입
1) 문자 char
2) 숫자
-정수(byte, short, int, long) : int가 20억이 넘을 땐 long / byte의 범위 : -128~127
-실수(float, double) : float는 오차없이 7자리, double은 15자리
3) 논리 boolean (true, false)
int score = 100; //변수
score = 200;
final int MAX = 100; //MAX는 상수. 상수에 저장된 값은 변경불가.
MAX = 200; --> 에러
** 10진수 외>> 16진수 - 리터럴 앞에 접두사 '0x' / 8진수 - 접두사 '0' / 2진수 - 접두사 '0b'
** 정수형 리터럴에 구분자'_' 삽입 가능>> long l = 10_000_000_000L; 100억은 접미사 L 생략불가 *
** 실수형 : 3.14, 3.0e8, 1.4f, 0x1.0p-1 ==> 접미사 f(float/생략불가), d(double/생략가능)
1) 기본형(primitive type) : 8개 (boolean, char, byte, short, int, long, float, double)/ 실제 값을 저장
2) 참조형(reference type) : 기본형 제외한 나머지(String, System 등) / 메모리 주소를 저장(4byte or 8byte)

<논리형(boolean)> true/ false, 조건식과 논리적 계산에 사용
<문자형(char)> 문자 저장, 변수 당 하나의 문자만 저장 가능
<정수형(int, long, byte, short)> 정수 값 저장/ int, long 주로 사용, byte는 이전 데이터 다루는데 사용, short는 c언어와의 호환
<실수형(float, double)> 실수 값 저장/ float는 부동소수점, double은 float보다 두배의 크기(8byte)

1) 범위가 '변수 > 리터럴'인 경우 OK
ex) int i = 'A'; // int> char
long l = 123; // long > int
double d = 3.14f; // double > float
2) 범위가 '변수 < 리터럴'인 경우, 에러
ex) int i = 300000_0000; // int의 범위(+_20억) 벗어남
long l = 3.14f ; // long < float
float f = 3.14 ; // float < double_
3) byte, short 변수에 int 리터럴 저장가능 (단, 변수의 타입의 범위 이내여야함)
ex) byte b = 100; //OK (byte의 범위 -128~127)
byte b = 128; //에러
* 문자열 결합
7+" "; //"7 "
" "+7; //" 7"
7+"7"; // "77"
7+7+""; //"14"
""+7+7; //"77"
int x = 10;
int y = 20;
//빈 저장공간 변수 tmp
int tmp;
tmp = x; //x의 값을 tmp에 저장
x= y; //y의 값을 x에 저장
y= tmp; // tmp의 값을 y에 저장
: 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것.
최대값 + 1 => 최소값
최소값 - 1 => 최대값
: 부호없는 정수는 2진수로 '0000'이 될 때 오버플로우 발생
부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우 발생 (1111(최대값) -> 0000(최소값))
ex. 부호없는 정수(4bit) : 0~15
부호있는 정수(4bit) : -8~7
숫자를 문자로 변환 - 숫자에 '0'을 더함
3+'0' --> '3'
문자를 숫자로 - 문자에서 '0'을 뺌
'3' - '0' --> 3
숫자를 문자열로 변환 - 숫자에 빈 문자열 ""을 더함
3 + "" --> "3"
문자를 문자열로 변환 - 빈 문자열 ""을 더함
'3'+ "" --> "3"
문자열을 숫자로 변환 - Integer.parseInt() 또는 Double.parseDouble() 사용
Integer.parseInt("3") --> 3
Double.parseDouble("3.14") --> 3.14
문자열을 문자로 변환 - charAt(0)을 사용
"3".charAt(0) --> '3'