2013년 10월 24일 목요일

[자바형변환,JAVA강좌]자바 묵시적/명시적인 형 변환(Java Casting)

[자바형변환,JAVA강좌]자바 묵시적/명시적인 형 변환(Java Casting)

 1. 자바 묵시적 형변환
 
자바에서는 데이터의 손실이 없이 안정적으로 형 변환이 가능한 경우에는 자동적으로 묵시적인 형 변환을 시도하나 데이터의 손실을 야기할 가능성이 있는 경우엔 자동적인 형 변환을 방지한다.
객체 관계에서는 하위 클래스는 상위클래스로 묵시적 형변호나 가능하다.(upcasting)

- 대입 형 변환 (Assignment conversion)
float x;
x = 1;
f(float f) { },,,,,,        f(1);
float f() { return 1 }
 
- 산술 형 상승(Numeric promotion)
’a’ -> 97
3 + 2.1 -> 3.0 + 2.1 -> 5.1

2. 자바 명시적 형변환
 
- 형 변환 연산자 사용
 
큰 것을 작은 곳에 넣을 려면 명시적인 형 변환이 필요
(int)3.3 -> 3
int i; float f = 3.14f; i=f; -> Error
int i; float f = 3.14f; i=(int)f; -> Error는 아니지만 잘림
산술 자료형과 논리 자료형 및 참조 자료형 사이에는 현변환 불가능
산술 자료형과 논리 자료형 사이의 형 변환 효과
산술 자료형을  boolean형으로 -> i !=0
Boolean 자료형을 산술 자료형으로 변환 -> (x < y) ? 1 : 0

[예제]
 
class Test {
  public static void main (String args[])
    {
   int i = 1;
         long j = 2;
         j = i;       // 안전한 형변환
         f(i);        // 안전한 형변환
         i = (int)j;
         System.out.println("i=" + i); 
         //i = j;       // 오류: 묵시적 형변환 불가능
         g((int)j);
         //g(j);        // 오류: 묵시적 형변환 불가능
         i = (int) j; // 명시적 형변환을 통해서 해결
         g((int) j);  // 명시적 형변환을 통해서 해결
     }
     static void f(long j)
     {
      System.out.println("f()에서 j=" + j);
     }
     static void g(int i)
     {
      System.out.println("g()에서 i=" + i);
     }
 
}

[결과]
 
f()에서 j=1
i=1
g()에서 i=1
g()에서 i=1
 

댓글 없음:

댓글 쓰기