156쪽에서 char st[]= 'i am tom!'이 널 문자 때문에 문자열의 크기보다 1 큰 배열이 만들어진다고 알고 있습니다.
그런데 207쪽의 String str ='information!';
int n=str.length();에서 생성되는 문자열의 크기는 널 문자를 제외하고 만들어진다고 나와있습니다. 두 가지 상황의 차이점이 무엇인지 궁금합니다.
안녕하세요 길벗수험서 운영팀입니다.
st[]는 C언어 문자 배열이며,
str은 Java의 문자열 자료형(객체) 입니다.
2개를 정확히 구분해두세요.
둘 모두 "abc" 3문자를 저장한다고 가정하죠.
st[]의 경우 마지막 널 문자가 존재하여 다음과 같은 배열이 생성됩니다.
[ 'a', 'b', 'c', '\n' ] \n - 널을 의미하는 특수문자
이때 배열의 길이를 반환하게 되면, 4가 나오게 되죠.
str의 경우 메모리를 뜯어보면 위의 st[]와 다를 바 없습니다.
다만 이것은 각 문자를 배열로 저장한 형태인 C언어와 다르게 문자열만을 위해 만들어진 자료형(String)이란 것을 감안하세요.
때문에 실제 메모리에는 널문자까지 함께 저장되지만 사용자에게는 abc만 저장된 것 처럼 보여줍니다.
"abc"
때문에 length로 길이를 반환해도 문자의 개수인 3만을 반환하게 되죠.
(문자 배열과 다르게 메모리를 뜯어보지 않는이상 String 자료형에서 널문자를 확인할 방법은 없습니다.)
행복한 하루되세요 :)
-
관리자2020-11-23 10:19:31
안녕하세요 길벗수험서 운영팀입니다.
st[]는 C언어 문자 배열이며,
str은 Java의 문자열 자료형(객체) 입니다.
2개를 정확히 구분해두세요.
둘 모두 "abc" 3문자를 저장한다고 가정하죠.
st[]의 경우 마지막 널 문자가 존재하여 다음과 같은 배열이 생성됩니다.
[ 'a', 'b', 'c', '\n' ] \n - 널을 의미하는 특수문자
이때 배열의 길이를 반환하게 되면, 4가 나오게 되죠.
str의 경우 메모리를 뜯어보면 위의 st[]와 다를 바 없습니다.
다만 이것은 각 문자를 배열로 저장한 형태인 C언어와 다르게 문자열만을 위해 만들어진 자료형(String)이란 것을 감안하세요.
때문에 실제 메모리에는 널문자까지 함께 저장되지만 사용자에게는 abc만 저장된 것 처럼 보여줍니다.
"abc"
때문에 length로 길이를 반환해도 문자의 개수인 3만을 반환하게 되죠.
(문자 배열과 다르게 메모리를 뜯어보지 않는이상 String 자료형에서 널문자를 확인할 방법은 없습니다.)
행복한 하루되세요 :)