형 변환은 치역(traget type)에 정의역(source type)의 값을 배정할 때 발생

확대(widening)형변환
- 치역(traget type)이 정의역(source type)보다 더 넓어 값의 손실이 발생되지 않고 저장.
예 : 8비트의 바이트 값을 32비트의 정수형으로 변환하는 경우

// 낮은 한계 값을 가진 형이 높은 한계 값을 가진 형으로 자동으로 변환
public class WideningTypeConversion {
  public static void main(String[] args) {
    short s=1; int i; long l;
    float f; double d;

    i = s; l = i;
    System.out.println("s = " + s + " , i = " + i + " , l = " + l);
    f = l; d = f;
    System.out.println("f = " + f + " , d = " + d);
  }
}

축소(narrowing)형변환
- 명시적은 형변환 구문을 사용해야 한다
       (target-type) value
- 치역(traget type)이 정의역(source type)보다 좁아 값을 저장할 수 없는 경우.
예 : 32비트의 정수형 값을 8비트의 바이트 형으로 변환하면 정보의 손실이 발생

// 높은 한계 값을 가진 형을 낮은 한계 값을 가진 형으로 변환
public class NarrowingTypeConversion {
  public static void main(String[] args) {
    short s; int i; long l;
    float f; double d=1.2345678912345678;

    f = (float)d; // 명시적 형 변환
    System.out.println("f = " + f + " , d = " + d);
    l = (long)f; i = (int)l; s = (short)i; // 명시적 형 변환
    System.out.println("s = " + s + " , i = " + i + " , l = " + l);
}
}

* 묵시적 형변환
-두 개의 다른 자료형을 가지고 연산을 수행 시에 묵시적으로 큰 한계 값을 가진 자료형으로 변환되어 구현

public class ExplicitTypeConversion {
  public static void main(String[] args) {
    int x;
    float y, z;
    char c='A';

    x = 7 / 2;
    y = (float) 7 / 2;
    z = 7 / 2;
    System.out.println("x = " + x + " y = " + y + " z = " + z);
    c++;
    System.out.println("c = " + c);
  }
}