본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] 형 변환에 대한 깊숙한 이야기.

by 돼지왕 왕돼지 2013. 8. 5.
반응형


 자바, 형 변환에 대한 깊숙한 이야기.

 

[Java] 형 변환에 대한 깊숙한 이야기.


요즘은 Eclipse 를 비롯한 IDE 들이 워낙 잘 되어 있어서, 알아서 에러를 표시해주고 어떻게 고쳐져야 하는지 Suggestion 까지 나와서 잊기 쉬운 간단하면서 당연한 형변환에 대한 이야기를 해본다.



작은 타입의 데이터를 큰 타입의 변수에 할당할 때는 자동 변환된다.


작은 타입과 큰 타입의 예는 int 와 long 의 관계처럼 볼 수 있다.

만약 long 타입의 변수가 있는데, 이 변수에 int 값을 넣어주면 자동 형변환이 된다는 이야기이다.


int a = 10;

long b = a;  // OK!! no casting necessary




큰 타입의 데이터를 작은 타입 변수에 할당할 때는 명시적으로 형 변환을 해 주어야 한다.


큰 타입의 데이터릊 작은 타입의 변수에 할당할 때는 명시적으로 형 변환을 해 주어야 한다.


long a = 10L;

int b = a; // problem!!!!! casting necessary.

int b = (int) a; //  OK!!!







int 형보다 작은 타입의 정수끼리 연산을 하면 int형으로 자동 형 변환된 후 연산된다.


예를 들어 byte 끼리 연산을 하게 되면.. ( 혹은 short 에 대해 )


byte byte1 = 40;

byte byte2 = 30;

byte byte3 = byte1 + byte2; // problem!! casting necessary

byte byte3 = (int)( byte1 + byte2 ); // OK!!!


이 부분은 몰랐던 것!!!!! 주의하자.


조금 애매한 것은 char. char 의 경우는 casting 없이 사용가능하다. 이유는 char 는 글자 하나의 값을 갖기도 하지만 ASCII 코드로서 정수값을 갖기도 하기 때문이다.




다른 타입간의 연산의 경우는 큰 타입으로 변환된 후 연산된다.


int intVar = 30;

long longVar = 25L;

int intResult = (int) ( intVar + longVar ); // result is long. casting necessary

long longResult = intVar + longVar; // result is long. no casting.


반응형

댓글