인프런 커뮤니티 질문&답변

David님의 프로필 이미지
David

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

문자열 병합(String concatenation)에 관한 간단한 질문

해결된 질문

작성

·

301

0

안녕하세요 선생님, 다름이 아니라 제가 지난 String[], String, charAt, length와 관련된 질문 이후로 문자열(String)을 계속 공부하면서 막히는 것이 조금 있어 이렇게 질문을 남깁니다.

아래 코드에서 제가 간단하게 System.out.println(); 명령문으로 아래 문장들을 출력해봤습니다:

String 문자열 출력 질문.jpg

결과 (1)에서는 "Hello, "와 "World!" 2개의 단어가 합쳐져서 문장 Hello, World!가 출력이 되고, 결과 (2)에서는 Route 12가 아닌, Route 66으로, 결과 (3)에서는 25 years old 이라고 출력이 되는데, 이렇게 되는 이유가 System.out.println(); 명령문의 괄호 안에 쓰여진 문장들이 기본적으로 String으로 간주하여 결과를 출력하고, 만일 숫자가 먼저 온다면 int로 인지해서 결과를 먼저 받은 다음, + 기호를 통해 문자열을 출력해서 그런 건가요?

혹여나 시간이 되신다면, 선생님으로부터 답변을 받았으면 좋겠습니다! 지난 번 QNA가 너무 좋아서 아직도 기억에 남네요..ㅎ 미리 감사합니다 :)

답변 1

1

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

올바로 이해하고 계십니다.
설명을 하기 전에 먼저 아래 세 가지를 적어볼게요.
1) 정수와 정수를 더하게 되면 그 결과는 정수가 됩니다.
2) 정수와 문자열을 더하게 되면 그 결과는 문자열이 됩니다.
3) 연산에는 우선순위가 있습니다.

작성하신 예제 2번째에서 기본적인 연산 순서에 따라 "Route" 에 " " 이 더해지며 현재까지의 결과는 문자열입니다. 여기에 정수 6을 더하는데 앞의 자료형이 문자열이므로 "6"이 더해져서 결과는 "Route 6"이 됩니다. 마지막으로 다시 한 번 정수 6을 더하는데 같은 원리로 "6"이 더해져서 최종 결과는 "Route 66"이 되지요.

작성하신 예제 3번째에서 기본적인 연산 순서에 따라 20에 5가 더해집니다. 둘 다 정수이므로 결과는 25가 됩니다. 여기에 " years old"를 더하는데 이는 문자열이므로 최종 결과는 "25 years old"라는 문자열이 됩니다.

다른 예제를 가져와봤는데요.

System.out.println(1 + 2 + "삼" + 4 + 5); // 3삼45

이 예제에서는 기본적인 산술 연산 방향(왼쪽에서 오른쪽으로)에 따라 먼저 1에 2가 더해집니다. 결과는 정수인 3인데 여기에 문자열 "삼"을 더하게 되어 결과는 문자열인 "3삼"이 되지요. 이어서 정수 4를 더하는데 앞의 자료형이 문자열이므로 "4"가 더해져서 "3삼4"가 되며, 마지막의 정수 5도 같은 원리로 문자열인 "5"가 더해져서 최종 결과는 "3삼45"가 됩니다.

그런데 아래 예제는 조금 다릅니다.

System.out.println(1 + 2 + "삼" + (4 + 5)); // 3삼9

이 예제에서 1 + 2 + "삼" 까지는 같습니다. 결과는 문자열인 "3삼"이 되는데요. 그 이후에 더해지는 (4 + 5)의 연산은 괄호로 둘러쌓여있으며 이는 다른 연산보다 먼저 수행됩니다. 그래서 정수 4에 5가 더해진 9를 앞의 결과인 "3삼"에 더하게 되는 것입니다. 물론 앞의 결과는 문자열이므로 9가 문자열 형태로 더해져서 최종 결과는 "3삼9"가 됩니다.

학습에 도움되시길 바라겠습니다 😊
감사합니다.

David님의 프로필 이미지
David

작성한 질문수

질문하기