1. 형변환 (Casting, Type Conversion)
- 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있음 : int → long → double
- 큰 범위에서 작은 범위는 문제가 발생할 수 있음 : 소수점 버림, 오버플로우
package casting;
public class Casting1 {
public static void main(String[] args) {
int intValue = 10;
long longValue;
double doubleValue;
longValue = intValue; // int → long
System.out.println("longValue = " + longValue);
doubleValue = intValue; // int → double
System.out.println("doubleValue = " + doubleValue);
doubleValue = 20L; // long → double
System.out.println("doubleValue2 = " + doubleValue);
}
}
[Casting1]
자동 형변환 (= 묵시적 형변환)
- 작은 범위에서 큰 범위에 값을 대입할 때 사용.
- 작은 범위 숫자 타입에서 큰 범위 숫자 타입으로의 대입은 개발자가 직접 형변환 하지 않아도 자동으로 일어남.
package casting;
public class Casting2 {
public static void main(String[] args) {
double doubleValue = 1.5;
int intValue = 0;
// intValue = doubleValue; // 컴파일 오류 발생
intValue = (int) doubleValue; // 명시적 형변환
System.out.println("intValue = " + intValue); // 소수점 사라지고 정수만 출력.
}
}
[Casting2]
명시적 형변환
- 큰 범위에서 작은 범위에 값을 대입할 때 사용.
package casting;
public class Casting3 {
public static void main(String[] args) {
long maxIntValue = 2147483647; // int 최고값
long maxIntOver = 2147483648L; // int 최고값 + 1 (초과)
int intValue = 0;
intValue = (int) maxIntValue; // 형변환 (longg → int)
System.out.println("maxIntValue casting = " + intValue);
// int의 범위를 넘어서면 int의 가장 작은 범위부터 시작하여 출력.
intValue = (int) maxIntOver; // 형변환
System.out.println("maxIntOver casting = " + intValue);
}
}
maxIntValue casting = 2147483647
maxIntOver casting = -2147483648
[Casting3]
형변환 할 때 작은 숫자가 표현할 수 있는 범위를 넘어서면 가장 작은 범위부터 시작하여 출력하게 됨.
package casting;
public class Casting4 {
public static void main(String[] args) {
int div1 = 3 / 2;
System.out.println("div1 = " + div1); // 1
double div2 = 3 / 2;
System.out.println("div2 = " + div2); // 1.0
double div3 = 3.0 / 2;
System.out.println("div3 = " + div3); // 1.5
double div4 = (double) 3 / 2;
System.out.println("div4 = " + div4); // 1.5
int a = 3;
int b = 2;
double result = (double) a / b;
System.out.println("result = " + result); // 1.5
}
}
[Casting4]
자바에서 계산은 다음 2가지를 기억하자.
1. 같은 타입끼리의 계산은 같은 타입의 결과를 냄.
2. 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어남.
'Studying > JAVA' 카테고리의 다른 글
[JAVA]_Array(배열) (1) | 2024.12.09 |
---|---|
[JAVA]_Scanner(스캐너) (1) | 2024.12.05 |
[JAVA]_Scope(스코프) (0) | 2024.12.03 |
[JAVA]_Loop Statement(반복문) (0) | 2024.12.03 |
[JAVA]_Conditional Statement(조건문) (2) | 2024.11.29 |