[TIL] CharAt(i) - '0' 의 이유

정석·2024년 8월 3일

TIL

목록 보기
12/40
post-thumbnail
String str = "12345";

System.out.println(str.charAt(0));
System.out.println(str.charAt(1));
System.out.println(str.charAt(0) + str.charAt(1));

// 출력 : 1 2 99

위의 예시에서 볼 수 있듯이 그냥 charAt(index) 를 출력하면 문제 없이 출력됨을 알 수 있다.

하지만 값을 더해보면 3이 아니라 99라는 숫자가 출력된다.

이 이유는 char 형이 사칙연산에 이용되면 아스키 코드 값 으로 연산이 되어 문제가 생기는 것이다.

아스키 코드 표는 아래와 같다.

그림에서 살펴보면 0 이라는 숫자 값은 아스키 코드 48을 갖는다. 거기서 부터 숫자가 0 ~ 9까지 이어지는데

예제에서의 str.charAt(0)char형의 1 이므로 49 라는 값인 것이고,
str.charAt(1)char형의 2 이므로 50의 값인 것이다.

따라서 99라는 출력이 발생한다.

문제를 해결하기 위해선 char 형의 '0' 을 빼주면 된다. 그럼 49 - 48 이 되고, 50 - 48 이 되어 3 이라는 정답을 출력할 수 있다.

0개의 댓글