True, False 값만 저장
'A', '1'와 같은 문자 하나만 저장
각 변수 표현 범위를 넘는 숫자를 넣게되면 오버플로우가 발생하고, 해당 숫자를 출혁해보면 입력값과 다른 값으로 표현됩니다.
그렇기 떄문에 각 변수들의 표현 범위를 잘 알아야 버그가 생기지 않습니다.
실수는 표현범위가 매우 넓어서 정수형 변수에서 담지 못할 수 있습니다.
long보다 범위가 크다 (float를 long으로 자동 형변환 불가)
-> 이유는 자바가 부동소수점(소수점이 움직인다)을 사용하기 떄문
부동 소수점 방식: 가수와 지수를 구분해서 저장하고 이값들을 곱한 값을 저장하는 방식
"test"와 같은 문장을 저장
문장의 끝에 \0(NULL 문자)가 함께 저장이 됩니다.
(몇개의 byte를 쓸지 모르기 떄문에 끝을 표시해야 합니다)
Stack 영역 VS Heap 영역
- Stack의 경우에는 정적(정해져 있는 크기)으로 할당된 메모리 영역
-> 그래서, 크기가 몇 byte인지 정해져있는 기본형 변수를 저장
-> 크기가 정해져 있는 참조형 변수의 주소값도 저장- Heap의 경우에는 동적(알 수 없는 크기)으로 할당된 메모리 영역
->크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장
객체,배열,리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장
래퍼 클래스는 "기본형 변수를 클래스로 한 번 감싸는 변수"
ex int - > Int
doduble -> Double
...
int number = 21;
Integer num = number; // Boxing
System.out.println(num.intValue()); //Unboxing
Scanner sc = new Scanner(System.in); // Scanner 객체를 new 명령어로 생성합니다.
String input = sc.next(); // sc(Scanner)의 .next(); 를 실행하면 input 변수에 입력한 글자를 받을 수 있습니다.
Java 프로그램 안에서 자동으로 형을 바꿔주는 케이스
변수 타입별 크기 순서
byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
변수 크기가 큰 순서대로 자동으로 형변환이 된다
EX
int intNumber = 100;
long longNumber = intNumber;
더큰 표헌범위를 가진 타입으로 변환되는것이라 값의 손실이 없습니다
그래서 컴파일러가 자동으로 형변환을 해준다.
int intNumber = 10;
double doubleNumber = (double)intNumber;
System.out.println("double number: " + doubleNumber);
더 작은 표현범위를 가진 타입으로 변환되는것이라 값의 손실이 생김
그러기 떄문에 자동으로 형변환 해주지 않고 개발자가 선택하여 형변환 시켜줘야함