본문 바로가기

JAVA/혼자공부하는자바

[JAVA기초] 정수의 타입 변환 2 (연산에서의 타입변환)

728x90

※정수 타입 변수가 산술 연산식에서 피연산자로 사용되는 경우

   자바에서는 피연산자를 4byte 단위로 저장하기 때문에 그보다 작은

   byte, char, short 타입 변수는 int 타입으로 자동 변환이 된다.

 

 

ex) byte 타입 변수가 피연산자로 사용된 경우

byte x = 10;
byte y = 20;          //1,2번 줄 변수값 int로 형변환
byte result = x + y;  //컴파일 에러
int result = x + y;

x와 y변수가 연산식에 사용되어 자동으로 int형 변환이 되었기 때문에

byte형 변수 result의 허용범위가 넘어 컴파일 에러가 발생한다.

그렇기 때문에 result 타입을 int로 선언해주어야 한다.

 

 

ex) int 타입 변수가 피연산자로 사용된 경우

int x = 10;
int y = 20;
int result = x + y;

별 다른 형 변환이 일어나지 않아 정상적으로 컴파일된다.

특별한 경우가 아니면 정수 연산에 사용하는 변수는 int타입으로 선언하는 것이 효과적이다.

 

 

 

ex) char 타입으로 선언한 변수에 연산식을 저장하는 경우

char 타입으로 선언한 변수 값을 연산할 시에 int값으로 변환되어 char타입으로 출력을 시도할 시 컴파일 에러가 발생한다.

 

 

출력 변수 데이터타입을 int로 수정해주어 정상 출력

 

 

만약 출력값을 문자로 하고 싶다면 강제형 변환을 사용해준다.

 

 

 

ex) byte 타입으로 선언한 변수에 연산식을 저장하는 경우

byte로 선언한 변수로 연산할 때에는 int로 형 변환되어 연산되기 때문에 컴파일 에러가 나야 하지만

별도의 변수 없이 직접 연산할 경우에는 JVM이 아닌 자바 컴파일러가 연산하므로 형 변환 없이 연산이 이루어져 컴파일 에러가 일어나지 않는다.

다시 말해 변수가 사용되어 연산 시에만 int변환이 일어난다는 뜻

 

 

ex) long 타입 변수가 피연산자로 사용된 경우

피 연산자 중 하나가 long 타입이면 다른 피연산자는 long 타입으로 자동 변환된다.

그렇기 때문에 int로 선언한 result 변수에서 컴파일 에러 발생하기 때문에 long 타입으로 만들어 주어야 한다.

 

byte, int, long 3가지 타입으로 연산한 값은 long타입으로 변환이 된다.

 

 

 

int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue;   //intValue는 double형으로 변환되어 result에 15.5가 저장되며

이는 실수 연산에서도 마찬가지로 피연산자 중 하나가 double 타입일 경우 다른 피연산자도 double 타입으로 자동 변환되어 연산된다.

 

 

 

int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int) doubleValue;  //result에 15가 저장됨

double 변수를 정수로 연산하고 싶은 경우(다른 타입 연산이 필요할 경우) 먼저 강제 변환 뒤 연산을 수행하여야 한다.

 

실수 리터럴을 연산할 때 java는 리터럴을 double 타입이라고 인식을 하여

float타입으로 연산이 필요할 때에는 변수 값 뒤에 리터럴 f을 붙여 연산한다.

 

 

 

정수 연산의 결과를 실수로 저장할 때 주의점

실수 변수 간 연산에는 실수 값이 제대로 출력된다.

 

 

하지만 정수 연산 값의 결과는 실수 값이 제대로 출력되지 않는다.

JAVA에서는 정수의 산술 연산 결과는 정수 값이기 때문에 실제로는 0.5의 값이어도 0.0으로 출력이 된다.

 

 

위의 코드에서도 2.5가 출력되어야 하지만 정수 연산으로 2가 출력되었다.

 

 

실수 값으로 출력하기 위해서는 피연산자의 데이터 형식을 실수 값으로 바꾸어주면 된다.

나눠주는 값에 소수점을 만들어서 실수로 만들거나

 

피연산자 변수 데이터 형식을 double타입으로 변환해준다.