Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- GraphQL
- JWT
- TIL
- Interceptor
- MySQL
- 인접행렬
- 인접리스트
- java
- typescript
- puppeteer
- Spring
- nestjs
- 알고리즘
- Linux
- Kubernetes
- javascript
- REST API
- bean
- LifeCycle
- dfs
- node.js
- Deep Dive
- 프로그래머스
- css
- winston
- 코딩테스트
- OOP
- 자료구조
- 탐욕법
- html
Archives
- Today
- Total
처음부터 차근차근
[Java] 형변환 본문
728x90
자동 형변환
작은 범위 숫자 타입에서 큰 범위 숫자 타입으로의 대입은 개발자가 직접 형 변환을 하지 않아도 되며, 자동으로 발생합니다.
public static void main(String[] args) {
int intValue = 10;
long longValue;
double doubleValue;
longValue = intValue; // int -> long
System.out.println("longValue = " + longValue); //longValue = 10
doubleValue = intValue; // int -> double
System.out.println("doubleValue1 = " + doubleValue); //doubleValue1 = 10.0
doubleValue = 20L; // long -> double
System.out.println("doubleValue2 = " + doubleValue); //doubleValue2 = 20.0
}
명시적 형변환
큰 범위에서 작은 범위 대입은 명시적으로 형 변환이 필요합니다.
이때 명시적으로 형 변환을 하기 위해 소괄호 안에 타입을 적어서 명시적으로 형 변환을 합니다.
public static void main(String[] args) {
double doubleValue = 1.5;
int intValue = 0;
//intValue = doubleValue; // 컴파일 오류 발생
intValue = (int) doubleValue; // 명시적 형변환
System.out.println(intValue); // 출력:1
}
intValue = (int) doubleValue; //형변환
이렇게 작성하는 것을 명시적 형변환이라고 합니다.
형 변환과 오버플로우
형변환을 할 때 작은 숫자가 표현할 수 있는 범위를 넘어선다면 이것을 오버플로우라고 합니다.
보통 오버플로우가 발생한다면 마치 시계가 한바퀴 돈 것 처럼 다시 처음부터 시작합니다.
public static void main(String[] args) {
long maxIntValue = 2147483647; //int 최고값
long maxIntOver = 2147483648L; //int 최고값 + 1(초과)
long maxIntOver2 = 3147483648L; // int 최고값을 한참 넘었다.
int intValue = 0;
intValue = (int) maxIntValue; //형변환
System.out.println("maxIntValue casting=" + intValue); //출력:2147483647
intValue = (int) maxIntOver; //형변환
System.out.println("maxIntOver casting=" + intValue); //출력:-2147483648
intValue = (int) maxIntOver2; // 형변환
// -10억이 추가되었다.
// 시계가 한바퀴 돌고 나서 다시 시작하는 순으로 발생
// overflow 발생
System.out.println("maxIntOver2 casting=" + intValue); //출력:-1147483648
}
오버플로우가 발생하지 않도록 큰 사이즈의 타입으로 변경하는 것이 좋습니다.
형변환과 계산
자바에서 형변환 계산은 다음 두가지를 기억하면 됩니다.
- 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.
- 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다.
public static void main(String[] args) {
int div1 = 3 / 2;
// int와 int로 계산했기 때문에 int가 나온다
System.out.println("div1 = " + div1); //1
// int와 int로 계산했기 때문에 int가 나온다
double div2 = 3 / 2;
System.out.println("div2 = " + div2); //1.0
// double와 int로 계산했기 때문에 double가 나온다
double div3 = 3.0 / 2;
System.out.println("div3 = " + div3); //1.5
// double과 int로 계산했기 때문에 double이 나온다.
// 명시적 형변환 사용
double div4 = (double) 3 / 2;
System.out.println("div4 = " + div4); //1.5
int a = 3;
int b = 2;
// 이때 a앞에 double을 붙여줬기 때문에 double이 나온다.
// 명시적 형변환 사용
double result = (double) a / b;
System.out.println("result = " + result); //1.5
}
'Language > Java' 카테고리의 다른 글
[Java] Array (1) | 2023.12.15 |
---|---|
[Java] Scanner (0) | 2023.12.15 |
[Java] 조건문, 반복문 (0) | 2023.12.15 |
[Java] 연산자 (0) | 2023.12.14 |
[Java] Java 변수 선언, 데이터 타입 (0) | 2023.12.14 |