변수
- 자료를 저장하기 위한 메모리 공간
- 타입에 따라 크기가 달라짐
- 메모리 공간에 값을 할당 후 사용
타입
✔️ 기본형(primitive type)
- 미리 정해진 크기의 memory size로 표현
- 변수 자체에 값 저장
- 모든 값 타입은 메모리의 스택(stack)에 저장
- ex) int, double, char 등
✔️ 참조형(reference type)
- 크기가 미리 정해질 수 없는 데이터의 표현
- 변수에는 실제 값을 참조할 수 있는 주소만 저장
- 메모리의 힙(heap)에 실제 값을 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장
기본형(Primitive Type)의 크기
* 실수(부동 소수점)의 연산은 정확하지 않다. 유효 자릿수를 활용하여 반올림처리하기
형변환
❓ 변수의 타입을 다른 타입으로 변환하는 것
- primitive는 primitive 끼리, reference는 reference 끼리 형 변환 가능
- boolean은 다른 기본 타입과 호환되지 않음.
- 기본 타입과 참조형의 형 변환을 위해 Wrapper 클래스 사용
형 변환 방법
- 형 변환 연산자(괄호) 사용
double d = 1.3;
int result = (int)d;
기본형의 형 변환
구분 | 이동 방향 | 값 손실 | 예시 |
묵시적 형 변환 | 작은 집 → 큰 집 | 없음 | byte b = 10; int i2 = b; |
명시적 형 변환 | 큰 집 → 작은 집 | 있을 수 있음 | int i = 200; byte b = (byte) i; |
✔️ 묵시적 형 변환
- 타입의 표현 범위가 커지는 방향으로 할당한 경우 발생
- 자료의 손실 걱정이 없으므로 JVM이 해줌.
✔️ 명시적 형 변환
- 값 손실이 발생할 수 있으므로 프로그래머 책임하에 진행
| 기본형 타입의 표현 범위 (오름차순)
✔️ 형 변환 예시
int a = Integer.MAX_VALUE;
int b = a + 1; // 오버플로우 발생
System.out.println(b); // -2147483648
long l1 = a + 1; // 오버플로우 발생, int + 1 한 후에 long에 넣어주기 때문
System.out.println(l1); // -2147483648
long l2 = (long) (a + 1); // 이것도 l1과 같다.
System.out.println(l2); // -2147483648
long l3 = (long)a + 1; // long으로 형 변환 후 연산해서 ㄱㅊ
System.out.println(l3); // 2147483648
int c = 1000000 * 1000000 / 1000000; // 1000000* 1000000 에서 이미 오버플로우 발생
int d = 1000000 / 1000000 * 1000000;
System.out.println(c + " : " + d); // -7273 : 1000000
'Java' 카테고리의 다른 글
[Java 05] 객체 비교 - equals(), Comparable (0) | 2023.08.09 |
---|---|
[Java 04] 객체와 상속 (0) | 2023.08.08 |
[Java 03] 객체지향 프로그래밍 1 - 객체, 클래스, OOP란? (0) | 2023.07.20 |
[Java 02] 배열 생성과 주의 사항, 다차원 배열 (2) | 2023.07.19 |
[Java 01] 연산자 우선 순위 (0) | 2023.07.18 |