Casting


<-強制変換/自動変換-->
byte < short, char < int < long < float < double
  • 自動変換(デフォルト)-販促
  • 小さいサイズのタイプを大きいサイズのタイプに変換すると、黙って形を変えることができます.
    「大変数=小変数」、直接代入可能
    // 1. 정수를 실수형 자료형으로 넣으면 (프로모션하면) 기존 정수형 값은 소숫점이 붙습니다.
    int i = 100; 
    
    float f = i; //f의 값이 100.0 나온다
    
    // 2. char형을 int에 넣으면
    char c = '가';
    
    int ii = c;//ii에는 44032 라는 숫자가 저장되어 있습니다.(유니코드)
    2.強制変換(明示)-鋳造
    大いに変化する
    大きいタイプを小さいタイプに変換する場合は、明確に変換します.
    float f = 100325198712124.1123f;
    
    int i = (int) f;
    
    System.out.println("값은? " + i); //i가 2147483647 출력
    
    // float값이 int의 값의 범위를 넘어서 담지 못하고 숫자가 날아가버림
    // int의 최대값(2,147,483,647)까지만 담았다.
    クラスからクラスへの変換
    親タイプを使用して子を参照する場合は、親タイプのメソッドしか使用できません.サブオブジェクトが持つメソッドまたはプロパティを使用する場合は、変換する必要があります.
    // class make / call - 객체 생성
    GrandFather g = new GrandFather();
    
    Father f = new Father();
    
    Me m = new Me();
    
    // UP - cast
    
    GrandFather gg = new Father();
    Father ff = new Me();
    
    // Down - cast
    // Father ff = (Father) new GrandFather();
    // err 런타임에러, new로 생성하자마자 갑자기 자식으로 내려가는 것은 불가능
    
    Father f4 = (Father) gg;
    
    *요약*
    // 부모 클래스는 자식클래스에 extends라고 적힌 "내 부모는 당신" 이라는 정보를
    // 일단 알아야 자바가 자동으로 형변환(업캐스팅)을 시켜주면서 정보를 들고 다녀야만,
    // 다시 자식으로 돌아가는 형변환(다운 캐스팅)을 할때 "아 내 자식이다." 라고
    // 에러 없이 돌아갈 수 있는 것이죠.