자바, 형 변환에 대한 깊숙한 이야기. |
요즘은 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.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] BItmapLruCache 구현하기. ( for Volley ) (0) | 2013.08.06 |
---|---|
[Java] SparseArray 뭐하는 녀석이야? (0) | 2013.08.06 |
[android] extrernal image file path <-> MediaStore Uri ( conversion ) (0) | 2013.08.05 |
[android] camera take and crop ( 사진 찍으면서 crop 까지 하기 ) (2) | 2013.08.05 |
[android] Gallery 로부터 사진 Crop 하며 Pick 하기 sample code. (0) | 2013.08.03 |
댓글