공부/Java

자바 형변환

Stair 2024. 8. 22. 20:17
반응형

박은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다

ex) in -> long -> double

 

하지만 큰 범위에서 작은 범위는 다음과 같은 문제가 발생할 수 있다

1. 소수점 버림

2. 오버플로우

 

int < long < double 이 더 큰 범위를 표현할 수 있다.

 

 

자바는 기본적으로 작은 범위에서 큰 범위로의 대입은 허용한다. 큰 그릇은 작은 그릇에 담긴 내용물을 담을 수 있다.

 

 

* 하지만 결국 대입하는 형을 맞추어야 하기 때문에 개념적으로는 캐스팅이 되어 들어가는것이다.

 

사실 이런 코드이다 괄호가 생략되는 것이라고 볼 수 있다.

 

 

반대로 큰 범위에서 작은 범위의 대입은 명시적 형변환이 필요하다.

 

 

 

 

명시적 형변환을 해주지 않으면 incompatible types의 에러가 발생한다.

 

 

 

 

 

캐스팅을 해주면 소숫점이 버려지고 int형으로 변경이 된다.

 

int는 double형보다 사이즈도 작고 실수도 필요할 수 없기 때문에 손실 되는 문제가 발생할 수 있다.

 

 

 

다음은 오버플로우가 발생하는 상황이다.

maxIntOver = 2147483648L 지정을 해주었다.

2147483647은 int가 표현할 수 있는 맥스값이다.

 

 

 

 

거기에 1을 증가시킨 maxIntOver을 대입하면 오버플로우가 발생하여 최소값부터 다시 시작된다.

 

중요한 점은 오버플로우가 발생하는 것 자체가 문제다. 오버플로우가 발생했을 때 결과가 어떻게 되는지 계산하는데 시간 낭비를 하면 안된다. 오버플로우 자체가 발생하지 않도록 막아야한다.

==형변환을 사용하여 오버플로우를 막자.

 

 

 

형변환은 대입 뿐만 아니라 계산할때도 필요하다

 

 

자바에서 계산은 다음 두가지를 기억하면 된다.

1. 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.

2. 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다.

 

반응형

'공부 > Java' 카테고리의 다른 글

java 여러가지 예문  (0) 2024.08.23
자바 Scanner  (0) 2024.08.22
자바 스코프(지역변수와 스코프)  (0) 2024.08.22
자바 for문  (0) 2024.08.22
자바 break, continue  (0) 2024.08.22