🧑‍💻복습/자바

자바 ex04 명시적 형변환 : Exam0930 ~ Exam0951

우동한그릇 2023. 5. 31. 12:38
반응형

Exam0930 - 명시적 형변환 : 실수→정수 (flaot → int, double → long)

package bitcamp.ex04;

public class Exam0930 {
  public static void main(String[] args) {
    float f = 3.14f;
    int i = (int) f; // 명시적 형변환: float를 int로 변환, 소수점 이하가 잘림
    System.out.println(i);

    double d = 9876.56789;
    long l = (long) d; // 명시적 형변환: double을 long으로 변환, 소수점 이하가 잘림
    System.out.println(l);
  }
}
// 명시적 형변환
// - 큰 메모리의 값을 작은 메모리로 변환할 때
// - 부동소수점을 정수로 변환할 때
// - 문법
//   변수 = (바꾸고자하는타입) 변수 또는 값;

//# 명시적 형변환 (Explicit Type Casting)
//
//public class Exam0930 {
//  public static void main(String[] args) {
//
//    // 부동소수점 메모리의 값은 정수 메모리에 직접 저장할 수 없습니다.
//    // 그럼에도 저장하려 한다면, 명시적 형변환 문법을 사용해야 합니다.
//    // 
//    // 명시적 형변환을 통해 부동소수점의 값을 정수 메모리에 저장할 때
//    // 소수점 이하의 값이 짤립니다.
//    //
//    // "명시적 형변환(explicit type conversion = explicit type casting)"?
//    // - 컴파일러에게 강제로 값을 넣을 것을 명령하는 것.
//    //
//    // float ==> int 
//    float f = 3.14f;
//    int i = (int)f;  // 소수점 이하가 제거됩니다.
//    System.out.println(i);
//
//    // double ==> long
//    double d = 9876.56789;
//    long l = (long)d; // 소수점 이하가 제거됩니다.
//    System.out.println(l);
//  }
//}

Exam0940 - 명시적 형변환 : 큰메모리→작은 메모리 (byte, short, int, long)

package bitcamp.ex04;

public class Exam0940 {
  public static void main(String[] args) {

    byte b = 100;
    short s = 100;
    int i = 100;
    long l = 100;

    // 큰 메모리의 정수 값을 작은 메모리에 저장하는 경우
    // => 컴파일 오류가 발생한다.
    // => 해결책? 명시적 형변환을 해야 한다.

    // 1) 큰 메모리의 값이 작은 메모리에 충분히 들어가는 경우
    // short ==> byte
    byte b2 = (byte)s; // 명시적 형변환
    System.out.println(b2);

    // int ==> byte
    b2 = (byte)i; // 명시적 형변환
    System.out.println(b2);

    // long ==> byte
    b2 = (byte)l; // 명시적 형변환
    System.out.println(b2);

    // 2) 큰 메모리의 값이 작은 메모리에 들어 갈 수 없는 경우
    // => 앞 쪽 바이트의 값이 짤려서 들어간다.
    int i2 = 0b0000_0000_0000_0000_0000_0001_0010_1100; // = 300(10진수)
    b2 = (byte) i2; // 
    System.out.println(b2); // 0b0010_1100

    l = 400_0000_0000L; // 0x00_00_00_09_50_2f_90_00
    i = (int)l; // 큰 메모리의 값이 작은 메모리에 들어가지 못하는 경우
    System.out.println(l); // 앞 쪽 바이트가 짤린다.
    System.out.println(i);
    System.out.println(0x502f9000);
  }
}
//# 형변환 - 명시적 형변환 : 큰 정수 변수의 값을 작은 정수 변수에 저장
//
// 큰 값을 작은 메모리에 넣는 것은 아무런 의미가 없다.
// 해서는 안된다.
// 다만,
// 큰 메모리의 값을 바이트 단위로 쪼개고 싶을 때 유용하다. 

Exam0950 - 명시적 형변환이 불가능한 경우 (정수,boolean / 문자열)

package bitcamp.ex04;
//# 형변환 - 명시적 형변환이 불가능한 경우 
// 
public class Exam0950 {
  public static void main(String[] args) {

    // 1) 정수 메모리끼리 형변환이 가능하다.
    // 2) 부동소수점을 정수로 형변환이 가능한다.
    // 3) 형변환 없이 정수는 부동소수점 메모리에 저장할 수 있다.
    // 4) 숫자를 문자 코드로 형변환 가능한다.
    // 그 외에는 형변환 불가!

    // 예) 정수, 부동소수점 ==/==> boolean
    boolean bool;
    // int,float => boolean
    //    bool = (boolean) 1; // 컴파일 오류!

    // 예) 문자열 ==/==> 정수, 부동소수점, 문자, boolean
    // String ==> int, float, char , boolean
    //    boolean v1 = (boolean) "true"; // 컴파일 오류!
    //    char v2 = (char) "가"; // 컴파일 오류!
    //    int v3 = (int) "123"; // 컴파일 오류!
    //    float v4 = (int) "3.14f"; // 컴파일 오류!
  }
}
//# 형변환 - 명시적 형변환이 불가능한 경우 
// 
// 1) 정수 메모리끼리 형변환이 가능하다.
// 2) 부동소수점을 정수로 형변환이 가능하다.
// 3) 형변환 없이 정수는 부동소수점 메모리에 저장할 수 있다.
// 4) 숫자를 문자 코드로 형변환할 수 있다.
// 그 외에는 형변환 불가!

// 예) 정수, 부동소수점 ==/==> boolean
boolean bool;
//    bool = (boolean) 1; // 컴파일 오류!

// 예) 문자열 ==/==> 정수, 부동소수점, 문자, boolean
//    boolean v1 = (boolean) "true"; // 컴파일 오류!
//    char v2 = (char) "가"; // 컴파일 오류!
//    int v3 = (int) "123"; // 컴파일 오류!
//    float v4 = (int) "3.14f"; // 컴파일 오류!

Exam0951 - 명시적 형변환 불가능한 경우, 특별한 메서드를 통해서 형변환 

package bitcamp.ex04;

public class Exam0951 {
  public static void main(String[] args) {

    byte b = Byte.valueOf("100");
    short s = Short.valueOf("32767");
    int i1 = Integer.valueOf("2122223333"); // 문자열 ==> int
    int i2 = Integer.parseInt("2122223333"); // 문자열 ==> int
    long l = Long.valueOf("9221111222233334444"); 
    float f1 = Float.valueOf("3.14f");
    float f2 = Float.parseFloat("3.14f");
    double d = Double.valueOf("9876.54321");
    boolean bool1 = Boolean.valueOf("TRUE");   // 문자열 ==> boolean
    boolean bool2 = Boolean.parseBoolean("TRUE");   // 문자열 ==> boolean
    char c = "가나다".charAt(1); // => 나

    System.out.println(b);
    System.out.println(s);
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(l);
    System.out.println(f1);
    System.out.println(f2);
    System.out.println(d);
    System.out.println(bool1);
    System.out.println(bool2);
    System.out.println(c);
  }
}
//# 형변환 - 명시적 형변환이 불가능한 경우, 특별한 메서드를 사용하면 가능하다.
//
// 1) 정수, 부동소수점, 문자열을 다른 타입으로 변환하는 특별한 메서드를 제공한다.
// 2) 메서드를 사용하여 형변환을 수행할 수 있다.
반응형