Java - Enhanced for with String

mil nil·2023년 1월 11일
0

문자열을 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이라는 저장 공간을 두고 같은 문자열에 대해서는 새로운 메모리에 할당 없이 재사용이 가능하다.

해결방법

  1. old school for문을 사용
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    ...
}
  1. split() 함수로 배열 생성
for (String t : s.split("")) {
      ...  
}
  1. chars() 함수로 intStream 생성
s.chars().forEach(c -> ... );

참조: JAVA 자바 문자열 forEach(Enhanced for) 사용법

profile
자바 배우는 사람

0개의 댓글