너와 나의 개발 고리

[JAVA] chap02 변수와 타입_연산식에서 자동 타입 변환 본문

JAVA/이것이 자바다

[JAVA] chap02 변수와 타입_연산식에서 자동 타입 변환

Oli-Viaaaa 2023. 8. 5. 17:25

자바는 실행 성능을 향상시키기 위해 컴파일 단계에서 연산을 수행한다.

정수 리터럴 10과 20을 덧셈 연산해서 결과를 byte 타입 변수 result에 저장하는 코드가 있다고 가정해보자

byte result = 10 + 20; // 컴파일 : byte result = 30;

자바 컴파일러는 컴파일 단계에서 미리 연산하여 30을 만들고 result 변수에 30을 저장하도록 바이트 코드를 생성한다.

 

하지만 정수 리터럴이 아니라 변수가 피연산자로 사용되면 실행 시 연산을 수행한다.

int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입변환되어 연산을 수행한다.

 

byte 타입 변수가 피연산자로 사용된 경우 int 타입 변수가 피연산자로 사용된 경우
byte x = 10;
byte y = 20;
byte result = x + y;     // 컴파일 에러
int result = x + y;
int x = 10;
int y = 20;
int result = x + y;

위의 표처럼 byte 변수 x,y가 피연산자로 사용되면 변수값은 int 타입으로 변환되어  연산되고, 결과도 int 타입으로 생성된다.

따라서 결곽값을 byte 변수에 저장할 수 없고 int 변수에 저장해야한다.

 

 

정수 연산식에서 모든 변수가 int 타입으로 변환되는 것은 아니다

int 타입보다 허용 범위가 더 큰 long 타입이 피연산자로 사용되면 다른 피연산자는 long 타입으로 변환되어 연산을 수행한다.

 

 

실수 연산자가 동일한 실수 타입이라면 해당 타입으로 연산된다

피연산자가 float 타입이면 float 타입으로 연산을 수행한다.

float result = 1.2f + 3.4f;  // 컴파일 : float result = 4.6f;

 

피연산자 중 하나가 double 타입이면 피연산자도 double 타입으로 변환되어 연산되며 연산 또한 double 타입이 된다.

 

 

int 타입과 int 타입과 double 타입을 연산하는 경우에도 int 타입이 double 타입으로 자동 변환되고 연산을 수행한다.

int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // 10.0 + 5.5

 

만약 int 타입으로 연산을 해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산을 수정하면된다.

int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int) doubleValue; // 10 + 5