형변환
자동형변환
작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다.
- int -> long -> double
큰 범위에서 작은 범위는 다음과 같은 문제가 발생할 수 있다.
- 소수점 버림
- 오버플로우
작은 범위에서 큰 범위로의 대입은 허용된다
int < long < double
intValue = 10
doubleValue = intValue
doubleValue = (double) intValue // 1. 형 맞추기
doubleValue = (double) 10 // 2. 변수 값 읽기
doubleValue = 10.0 // 3. 형 변환
자바는 기본적으로 같은 타입의 값을 대입할수있다.
작은범위 -> 큰범위 허용해준다
작은 범위에서 큰범위로 갈때 타입이 바뀐다? -> 자동 형변환 내부적으로 수행
=>개발자가 직접 변환하지 않아도 괜찮다 (중요: 작은 범위에서 큰범위로 갈때는 괜찮음)
명시적 형변환
숫자의 손실 발생
package casting;
public class Casting2 {
public static void main(String[] args) {
double doubleValue = 1.5;
int intValue = 0;
//intVAlue = doubleValue; // 컴파일 오류 발생 만약 1.5 달러를 넣는다 치면 0.5 달러가 날라가는것이다
intValue = (int) doubleValue; // 형변환
System.out.println(intValue); // 1.5 에서 0.5 가 사라지고 1 이 출력됨
}
}
대략적인 결과를 보고 싶은데 이때 소수점을 버리고 정수로만 보고 싶을 경우 형변환이 가능하다
=> 명시적 형변환
doubleValue = 1.5
intValue = (int) odubleValue;
intValue = (int) 1.5; // doubleValue에 있는 값을 읽는다.
intValue = 1; // (int)로 형변환 한다. intValue에 int형인 숫자 1을 대입한다.
형변환을 한다고 해서 doubleValue 자체의 타입이 변경되거나 그 안에 있는 값이 변경되는 것은 아니다. douValue에서 읽은 값을 형변환 하는 것이다. doubleValue 안에 들어있는 값은 1.5로 그대로 유지된다. 참고로 변수의 값은 대입연산자(=)를 사용해서 직접 대입할 때만 변경된다
형변환을 할 때 작은 숫자가 표현할수 있는 범위를 넘어선다면?
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; // 형변환 => 이상무
System.out.println("maxIntValue casting= "+ intValue);
intValue = (int) maxIntOver; // int 범위 초과한 형변환
System.out.println("maxIntOver casting= "+ intValue);
// maxIntValue casting= 2147483647
// maxIntOver casting= -2147483648
}
}
maxIntValue = 2147483647; //int 최고값
intValue = (int) maxIntValue; // 변수 값 읽기
intValue = (int) 2147483647L; // 형변환
intValue = 2147483647;
int 를 넘어가는 범위 => L 붙여주면 됨
maxIntValue casting= 2147483647
maxIntOver casting= -2147483648
-(마이너스) 가 붙는 전혀 다른숫자가 출력됨 = > 기준범위를 초과하게되면 다른숫자를 표현하게 되는데 이 현상을 오버플로우 현상이라고 한다.
중요한 것은 오버플로우가 발생하는 것 자체가 문제라는 점이다 때문에 타입을 변경해서 사이즈를 늘려 오버플로우 문제를 해결해야한다.
'JAVA' 카테고리의 다른 글
[JAVA] 2차원 배열 (0) | 2025.01.07 |
---|---|
[JAVA] 1차원 배열 (0) | 2025.01.07 |
지역 변수와 스코프 (0) | 2024.12.10 |
2024.12.10 자바 공부 (0) | 2024.12.10 |
자바빈 규약 (1) | 2024.12.09 |