char num = '1';
int tmp = num; //자동 타입 변환
System.out.print(tmp);
char num = '1';
System.out.print((int) num); //강제 타입 변환하여 출력

이렇게 문자 '1'을 자동 타입 변환을 하거나 강제 형 변환을 해서 출력을 하게되면 1이 출력이 되는것이 아니라 49가 출력이되어서 나온다.

 

위에서 49가 출력된 이유는 '1'은 아스키코드로 49이기 때문이다.

즉, 문자 '1'이 정수로 타입 변환이 될 때 아스키코드 49로 변환된 것이다.

 

이런 문제는 charAt()메소드를 사용할 때도 나타난다.

String num = "12345";
for(int i = 0; i < num.length(); ++i)
{
    int tmp = num.charAt(i);
    System.out.print(tmp);
}

이러한 코드를 실행해보면 출력값은 4950515253이 나온다.

'1' -> 49

'2' -> 50

'3' -> 51

'4' -> 52

'5' ->53

 

우리의 의도대로 문자 하나를 정수로 변환하려면 두 가지 방법이 존재한다.

  • 아스키 코드 사용('0'을 빼주기)
  • Character.getNumericValue() 메소드 사용

 

아스키 코드 사용('0'을 빼주기)

문자 '0'의 아스키 코드 값은 48이다.

위 예에서 말한것 처럼 '1'의 아스키코드는 49이므로 '1' - '0'을 하면 정수 1이되는 것이다.

char num = '1';
System.out.print(num - '0');

이렇게 하면 우리가 의도한대로 원하는 정수값이 출력이 된다.

 

Character.getNumericValue() 메소드 사용

Character 클래스의 getNumericValue() 정적 메소드를 사용하면 이 또한 우리가 의도한대로 원하는 정수값을 얻을 수 있다.

char num = '1';
System.out.print(Character.getNumericValue(num));

이 코드를 실행해보면 정상적으로 1이 출력되는 것을 확인할 수 있다.