✏️ Casting4

package casting;

public class Casting4 {

  public static void main(String[] args) {
    int div1 = 3 / 2;
    System.out.println("div1 = " + div1);  // div1 = 1

    double div2 = 3 / 2;
    System.out.println("div2 = " + div2);  // div2 = 1.0
    
    double div3 = 3.0 / 2;
    System.out.println("div3 = " + div3);  // div3 = 1.5

    double div4 = (double) 3 / 2;
    System.out.println("div4 = " + div4);  // div4 = 1.5

    int a = 3;
    int b = 2;
    double result = (double) a / b;

    System.out.println("result = " + result);  // result = 1.5
  }
}

✏️ 출력 결과

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

  1. 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.
    • int + intint를, double + doubledouble의 결과가 나온다.
  2. 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다.
    • int + longlong + long으로 자동 형변환이 일어난다.
    • int + doubledouble + double로 자동 형변환이 일어난다.

예시를 통해서 자세히 이해해 보자.

int div1 = 3 / 2;  // int / int
int div1 = 1;  // int / int이므로 int 타입으로 결과가 나온다.
double div2 = 3 / 2;  // int / int
double div2 = 1;  // int / int이므로 int 타입으로 결과가 나온다.
double div2 = (double) 1;  // int -> double에 대입해야 한다. 자동 형변환 발생
double div2 = 1.0;  // 1(int) -> 1.0(double)로 형변환 되었다.
double div3 = 3.0 / 2;  // double / int
double div3 = 3.0 / (double) 2;  // double / int이므로, double / double로 형변환이 발생한다.
double div3 = 3.0 / 2.0;  // double / double -> double이 된다.
double div3 = 1,5;
double div4 = (double) 3 / 2;  // 명시적 형변환을 사용했다. (double) int / int
double div4 = (double) 3 / (double) 2;  // double / int이므로, double / double로 형변환이 발생한다.
double div4 = 3.0 / 2.0;  // double / double -> double이 된다.
double div4 = 1.5;

3 / 2와 같이 int형끼리 나눗셈을 해서 소수까지 구하고 싶다면 div4의 예제처럼 명시적 형변환을 사용하면 된다.

물론 변수를 사용하는 경우에도 다음과 같이 형변환을 할 수 있다.

int a = 3;
int b = 2;
double result = (double) a / b;

처리 과정

double result = (double) a / b;  // (double) int / int
double result = (double) 3 / 2;  // 변수 값 읽기
double result = (double) 3 / (double) 2;  // double + int 이므로 더 큰 범위로 형변환
double result = 3.0 / 2.0;  // (double / double) -> double이 된다.
double result = 1.5;
profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글