문자열을 Enhanced for문으로는 사용이 불가능하다. 다음과 같이 문자열 s를 적용할 경우 에러가 발생하게 된다.
for (char c : s) {
...
}
foreach not applicable to type 'java.lang.String'
/Solution.java:8: error: for-each not applicable to expression type
for (char c : s) {
^
required: array or java.lang.Iterable
found: String
1 error
그 이유는 자바에서 문자열을 String Pool에 저장하며, heap과 달리 문자열의 한 문자씩에 대한 메모리 주소를 가지고 있지 않아 접근이 불가능하기 때문이다.
자바에서 문자열은 불변성(immutability)의 특성을 가지며, 문자열 객체에 대한 메모리 최적화를 위해 메모리에 String Pool이라는 저장 공간을 두고 같은 문자열에 대해서는 새로운 메모리에 할당 없이 재사용이 가능하다.
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
...
}
for (String t : s.split("")) {
...
}
s.chars().forEach(c -> ... );