조인영

concat 과 + 연산자의 차이

제목 그대로 concat 과 + 연산자의 차이에 대해 알고 싶습니다.
보여지는 결과는 같은데 각 메소드와 연산자가 구동하는 과정에 어떤 차이가 있나요?

작성중인 코드
public class StringExam{
    public static void main(String[] args) {
        String str1 = "안녕하세요. ";
        String str2 = "벌써 여기까지 오셨네요. 끝까지 화이팅!!";

        String concatResult ;
        String substringResult;

        //아래쪽에 코드를 작성하세요.
        concatResult = str1 + str2;
        substringResult = str1.substring(2);


        //이 아래는 정답 확인을 위한 코드입니다. 수정하지 마세요.
        System.out.println(concatResult);
        System.out.println(substringResult);
    }

}
1 개의 답변
정찬형

+ 연산자는 concat과 완전 다른 동작 방식인데요.
concat은 합친 문자열을 new String으로 생성합니다.
+ 연산자는 아래 코드와 같이 StringBuilder 클래스로 변환하여 append로 문자열을 더해준 뒤 toString()으로 결과값을 변환하여 넘겨줍니다.

(new StringBuilder(String.valueOf(str1)).append(str2).toString(); // +연산자 실제 동작방식

두 방식의 차이를 간단하게 설명 하자면
String 클래스에서 문자열을 더할 경우(concat method)

주소
1000 "try"
2000 "tryHello"
3000 "tryHelloWorld"

문자열을 더할 때마다 주소를 새로 할당하여 생성합니다.

그러나 StringBuilder클래스에서 문자열을 더할 경우(+ 연산자)

주소
1000 "try"
1000 "tryHello"
1000 "tryHelloWorld"

위와 같이 같은 주소에 문자열을 추가를 하는 방식입니다.

따라서 2개의 문자열을 합칠 경우 concat을 사용하고, str1 + str2 + str3 + ...과 같이 여러 문자열을 합칠 경우 +연산자를 사용하면 좋습니다.

String과 StringBuilder에 대해서 공부하시면 이해하기 쉬울 것 같네요.
더 궁금하신 점이 있다면 댓글 남겨주세요 :)

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.