Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

2.9 연산식에서 자동 타입 변환 본문

이것이 자바다/02 변수와 타입

2.9 연산식에서 자동 타입 변환

빌드이너프 2024. 3. 28. 18:24

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

 

byte result = 10 + 20;

자바 컴파일러는 컴파일 단계에서 10 + 20을 미리 연산해서 30을 만들고

result 변수에 30을 저장하도록 바이트코드를 생성함

따라서 실행 시 덧셈 연산이 없으므로 실행 성능이 좋아짐

 

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

byte x = 10;
byte y = 20;
byte result = x + y; // 컴파일 에러
int result = x + y;

정수 리터럴이 아니라 변수가 피연산자로 사용되면 실행시 연산을 수행함

정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입 변수는 int 타입으로 자동 타입 변환되어 연산을 수행한다

 

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

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

따라서 연산 결과는 long 타입 변수에 저장해야 함

 

실수 연산

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

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

 

하지만 피연산자 중 하나가 double 타입이면 다른 피연산자도 double 타입으로 변환되어 연산되고, 결과 또한 double 타입이 됨

int 타입과 double 타입을 연산하는 경우에도 int 타입 피연산자가 double 타입으로 자동 변환되고 연산을 수행함

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

 

public class Main {
    public static void main(String[] args) {
    	int x = 1;
    	int y = 2;
    	double result1 = x/y;
    	double result2 = (double) x/y;
    	double result3 = x/ (double) y;
    	double result4 = (double) x/ (double) y;
    	System.out.println(result1);
    	System.out.println(result2);
    	System.out.println(result3);
    	System.out.println(result4);
    }
}
0.0
0.5
0.5
0.5