정수
byte 타입의 범위가 -128 ~ 127인 이유
- 최상위 비트는 정수값의 부호를 결정한다.
- 최상위 비트가 0일 때 ▶ 양수
- 최상위 비트가 1일 때 ▶ 음수
- 실제 정수값은 나머지 7bit로 표현한다.
- 음수의 경우 10진수로 표현하고자 할 때는 1의 보수로 바꾸고 더한 값에 -를 붙여주면 십진수이다.
타입 | 메모리 사용 크기 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
byte | 1byte (8bit) | 0 | -128 | 127 |
short | 2byte(16bit) | 0 | -32768 | 32767 |
char | 2byte(16bit) | ‘\u0000’ | ‘\u0000’ | ‘\uffff’ |
int | 4byte(32bit) | 0 | -2^31 | 2^31 -1 |
long | 8byte(64bit) | 0L | -2^63 | 2^63 -1 |
실수
정수와는 다른 저장 방식( 부동 소수점)
가수 m은 0 ≤ m < 1 범위의 실수여야 한다. 예를 들어 실수 1.2345는 0.12345 * 10^1 로 표현된다. 이때 가수는 0.12345, 지수는 1이다.
타입 | 메모리 사용 크기 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
float | 4byte(32bit) | 0.0f | 32bit single precision | |
(+/-)1.4E-45 | (+/-)3.4028235E38 | |||
double | 8byte(64bit) | 0.0d | 64bit double precision | |
(+/-)4.9E-324 | (+/-)1.7976931348623157E308 |
논리
타입 | 메모리 사용 크기 | 기본값 | 값의 범위 |
---|---|---|---|
boolean | 1byte | true | false |
final int MY_BIRTHDAY = 980521;
// 상수 리터럴
=
을 통해 우측에 있는 값을 좌측 변수 명에 대입하여 저장 한다.int myInt; // 선언
myInt = 10; // 초기화
int myInt2 = 10; // 선언과 초기화를 동시에 함
변수가 메모리에서 살아있는 기간
public class LifeTime { // 스코프 1 start
int lifetime; // 인스턴스 변수 || 필드
static int lifetime2; // 정적 변수
void myMethod(int age) { // 스코프2 start
int myAge += age; // 지역 변수
} // 스코프2 end
} // 스코프 1 end
종류 | 선언위치 | 생성시기 | 소멸시기 |
---|---|---|---|
인스턴스 변수 | 클래스 영역 | 객체가 생성 될 때 생성 | 참조가 없을 때 GC가 객체를 지워버리는데 이 때 같이 소멸 |
정적 변수 | 클래스 영역 | 클래스가 처음 호출될 때 생성 | 자바 프로그램이 종료될 때 같이 소멸 |
지역 변수 | 메서드, 생성자, 초기화 블록 내부 등 클래스 영역이 아닌 영역 | 중괄호가 시작되는 시점에 생성 | 중괄호가 끝나는 시점에 소멸 |
주의할 점 1. 사용자로부터 입력받은 값을 변환할 때 값의 손실이 발생하면 안된다.
주의할 점 2. 정수타입을 실수타입으로 변환할 때 정밀도 손실을 피해야 한다.
int num1 = 123456780;
int num2 = 123456780;
float num3 = num2;
num2 = (int)num3;
int result = num1 - num2 // 예상값 : 0
System.out.println(result); // 실제값 : -4
float타입은 부호(1)지수(8)가수(23)으로 이뤄져있기 때문에 123456780을 23비트로 표현할 수 없다. 따라서 근사치가 되며 정밀도 손실을 일으킨다. 이를 피하는 해결책으로 안전하게 double을 사용한다.
public class Test {
// 1차원 배열 선언 방법
int[] array = new int[5];
int array[] = new int[5];
int[] array = {1,2,3,4,5};
// 1차원 배열 값의 초기화 및 참조
array[0] = 10; // 값 초기화
array[1] = 20;
.
.
.
int num = array[0] + array[2]; // 참조
}
String[][] array2D = new String[3][4];
String[][] array2D = {{"1", "2", "3", "4"},{"5", "6", "7", "8"}, {"9", "10", "11", "12"}};
int cnt = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
array2D[i][j] = cnt;
}
cnt++;
}
var
키워드를 통해 사용한다.type-inference(타입추론)
이 가능하다.