📌 형변환(캐스팅, casting) 이란?
변수 또는 상수의 타입을 다른 타입으로 변환하는 것이다.
📌 문자 → 숫자 형변환
1. String → Int
- Integer.parseInt() : 문자열 파싱하여
int 객체생성 (리턴타입은 기본 자료형) - Integer.valueOf() : 문자열로
Integer 객체생성 (리턴타입은 객체)
String sNum = "1234";
int num1 = Integer.parseInt(sNum);
int num2 = Integer.valueOf(sNum);
🎯 NumberFormatException 예외처리
만일 숫자 형태가 아닌 문자열을 숫자로 변환할 때, NumberFormatException이 발생하게 된다.
String sNum = "1234a";
int num = Integer.valueOf(sNum);
Exception in thread "main" java.lang.NumberFormatException: For input string: "1234a"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.valueOf(Integer.java:983)
at casting.main(casting.java:4)
따라서, 다음과 같이 NumberFormatException에 대한 예외처리를 해주면 안전하게 형변환 할 수 있다.
String sNum = "1234a";
int num;
try {
num = Integer.valueOf(sNum);
} catch (NumberFormatException e) {
num = 0; //숫자로 변환할 수 없는 문자열 형태이면 0으로 초기화
}
2. String → Double & Float
- Double.parseDouble()
- Double.valueOf()
- Float.parseFloat()
- Float.valueOf()
String sNum = "12.34";
// String -> Double
double d_num1 = Double.parseDouble(sNum);
double d_num2 = Double.valueOf(sNum);
// String -> Float
float f_num1 = Float.parseFloat(sNum);
float f_num2 = Float.valueOf(sNum);
3. String → Long & Short
- Long.parseLong()
- Long.valueOf()
- Short.parseShort()
- Short.valueOf()
String sNum = "12";
// String -> Long
long l_num1 = Long.parseLong(sNum);
long l_num2 = Long.valueOf(sNum);
// String -> Short
short sh_num1 = Short.parseShort(sNum);
short sh_num2 = Short.valueOf(sNum);
📌 숫자 → 문자 형변환
1. Int → String
- String.valueOf()
- Integer.toString()
- int + "" : Casting 방식. 정수 값에 빈 문자열을 더하게 되면, 문자열 합치기 연산으로 처리되어 결괏값도 문자열이 되게 된다.
int i = 1234;
String s;
// 문자 -> 숫자
s = String.valueOf(i);
s = Integer.toString(i);
s = "" + i;
🎯 valueOf / toString 차이점
둘은 정수를 문자열로 변환해 주는 똑같은 기능을 제공하지만, 만약 변환하고자 하는 값이 Null이라면 대응점이 다르게 된다.
String.valueOf()는 우선 "null"이라는 문자열로 처리한다.
하지만 Integer.toString()은 "Null PointerException"이라는 오류를 발생시킨다.
따라서 만약 null 조차도 오류가 아닌 문자열로 처리해야 한다면 String.valueOf()를 그 외라면 Integer.toString()을 사용하면 된다.
Object nullValue = null;
String str;
str = nullValue.toString(); // NullPointerException 발생시킨다.
str = String.valueOf(nullValue); // 문자열 "null"가 된다.
2. Double & Float → String
- String.valueOf()
- Double.toString()
- Float.toString()
double d = 1.23;
float f = 1.23;
String s;
// Double -> String
s = String.valueOf(d);
s = Double.toString(d);
// Float -> String
s = String.valueOf(f);
s = Float.toString(f);
3. Long & Short → String
- String.valueOf()
- Long.toString()
- Short.toString()
long l = 1234;
short s = 12;
String sNum;
// long -> String
sNum = String.valueOf(l);
sNum = Long.toString(l);
// short -> String
sNum = String.valueOf(s);
sNum = Short.toString(s);