[JAVA] 형변환
프로그래밍을 배우고 취직 한 지 9개월이 지난, 지금까지 제일 많이 본 예외처리 두 개가 있다. 그건 바로
NullPointException
integer cannot be cast to java.lang.string
특히 저 NullPointerException 은 이젠 내 친구같다 ^^;;
저 exception이 뜨는 이유의 80% 이상은 null 체크를 하지 않고 형변환을 해서 그렇다.
String 형변환 (Object to String)
1. (String)Object
- 이것은 NullPointerException 이 뜨질 않는다.
- 모든 타입을 String으로 강제 변환을 한다.
- 다만, Object 가 null 값이라면 null 로 된다. 문자열 “null”이 아니라.
2. Object.toString()
- Object (Wrapper Class - 래퍼 클래스) 의 데이터를 String 문자열로 바꾼다.
- Wrapper Class 는 사용가능하지만 Primitive type은 사용 불가.
- 예시)
int pri = 3; String str = pri.toString(); System.out.println(str);
결과 )
error: int cannot be dereferenced
- 예시)
- Object에 null값이 들어간다면 NullPointerException이 뜬다.
- 예시)
Object nullValue = null; String str = nullValue.toString(); System.out.println(str);
결과 )
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Object.toString()" because "" is null at main.main
- 예시)
3. String.valueOf()
- 위에 쓴 Object.toString()과 다르게 x 위치에 Wrapper Class, Primitive type 둘 다 사용 가능하다.
- x값이 null 이 들어간다면 결과값은 “null”의 문자열이 출력된다.
4. Integer.toString()
- 3번(String.valueOf())과 같은 기능이다. 참고로 3번은 4번을 호출하는 방식이다.
- 3번과 다르게 null값이 들어가면 NullPointerException이 뜬다.
int 형변환 (Object to int, String to int)
1. (int)Object
- 강제 형변환이다.
- ()괄호 안에 int뿐만 아니라 byte, double 등등 사용가능하다.
- 다만, 범위가 각자 다를 때 주의해야할 사항이 있다.
- 강제 타입 변환(Casting)
작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입
이렇게 큰 타입을 작은 타입으로 강제 캐스팅을 하면 담을 수 있을 정도로만 값이 바뀐다.
예시)float val = 3.14; int intVal = (int)val; // 3의 값으로 바뀐다.
- 자동 타입 변환(Promotion)
- 이는 작은 타입이 큰 타입으로 저장될 때 발생한다.
- 자동으로 변환된다.
- 타입 변환이 불가한 경우
- char 타입은 음수가 없다. <p>그래서 음수를 char로 변환하면 컴파일 에러가 난다.</p>
byte byteVal = 65; char charVal = byteVal; // 컴파일 에러
- char 타입은 음수가 없다. <p>그래서 음수를 char로 변환하면 컴파일 에러가 난다.</p>
- 강제 타입 변환(Casting)
- 기본 타입의 허용 범위
byte < short < char < int < long < float < double
2. Integer.valueOf((String) Object)
- Integer (wrapper class)객체로 반환
3. Integer.parseInt(Object.toString)
- 원시데이터인 int 타입으로 반환
- Autoboxing and Unboxing 이 도입된 Java 1.5 이후부터는 2번, 3번 둘 중 무엇을 써도 상관이 없다.
Comments