본문 바로가기
Android/Java

[ Java ] 자바에서 "1"과 '1'의 차이점: 문자열과 문자 할당 이해하기

by quessr 2024. 3. 19.

 

알고리즘을 풀다가 알게 된 사실을 정리 해 두고자 한다.

 

다음과 같이 String 값을 char[]로 바꾼 상황에서 반복문을 돌며.
문자 c가 "#"과 같을 경우 이진수인 "1"로 바꿔주고자 한 로직이었는다.

발견한 의문점은

stringArray[i] = '1';

로 할 경우에는 에러가 뜨지 않는데,

stringArray[i] = "1";

로 했을 경우에는 


다음과 같이 Type mismatch 에러가 난다는 것이었다.

위 현상이 왜 일어나는 것인지 찾아보니,
stringArray[i] = '1';은 문자형(char)으로 '1'을 할당하는 것이므로 작은 따옴표 안에 있는 문자는 문자형으로 인식되며, char 타입에 저장이 된다.

반면에 stringArray[i] = "1";은 큰 따옴표(")로 감싸진 문자열을 할당하려고 시도하는 것이므로 큰 따옴표 안에 있는 문자열은 문자열 타입(String)으로 인식되므로, char 타입에 직접 할당할 수 없습니다. 따라서 타입 불일치(Type mismatch) 오류가 발생한다.

 

예를 들어서,

'1' + 10 을 하게 되면 결과 값이 59가 나오고

"1" + 10 을 하게 되면 결과 값이 110이 나오게 되는데

작은 따옴표(')는 문자(char)를 표현하기 위해 사용하고, 큰 따옴표(")는 문자열(String)을 표현하기 위해 사용하기 때문이다. 

따라서 '1' 문자인 1은 연산을 하게 되면 아스키코드로 변환되어 49가 되고 
'1' + 10의 결과값이 59가 되는 것이다.