강의

멘토링

로드맵

Inflearn brand logo image

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

진우님의 프로필 이미지
진우

작성한 질문수

김영한의 실전 자바 - 중급 1편

String 클래스 - 비교

String 질문

작성

·

108

·

수정됨

0

화면 캡처 2025-01-11 201211.png.webp

str하고 str1이 왜 ==비교로 false 값이 나오나요? 둘다 object.toString()값을 받으니까 아래println결과에서도 같게 나오는데..
[질문 내용]
여기에 질문 내용을 남겨주세요.

답변 3

0

  1. == 연산자는 기본적으로 identity(동일) 비교를 수행합니다.

  1. 자바에서 기본형(int, float, ...)을 제외한 모든 것은 객체입니다.

  2. 따라서 String strString str1은 (서로 다른) 객체입니다.
    다만 그 객체가 담고 있는 값이 object.toString()으로 동등할 뿐입니다.


    즉 서로 다른 객체이기에 그 참조가 다릅니다(물리적으로 다른 위치). => 동일하지는 않다.

  3. println()에서 strstr1의 값이 같게 출력되는 이유는 해당 메서드는 println(str)과 같이 객체(str)가 argument로 전달된다면 (컴파일러에 의해) 자동적으로 println(str.toString())과 같이 동작하게 됩니다.

  4. 이때 String 객체(str)에 대한 toString() 메서드는 참조값이 아닌 문자열 값을 리턴하도록 오버라이드되어 있습니다.

  5. 따라서 println(str)println(str1)은 둘 다 object.toString()의 리턴값인 문자열 값을 리턴하기 때문에 같은 결과인 것입니다.

  6. 또한 문자열 객체에 대한 equals() 메서드는 toString() 메서드의 리턴 값을 비교하여 그 값이 같으면 true를 리턴합니다(equality,동등성 비교). 따라서 위 6번에 따라 true를 리턴합니다.

  7. 하지만 ==을 통한 비교는 identity, 동일성을 비교합니다. 이때 비교에 사용하는 것은 객체에 대한 toString()값이 아니라, 객체의 참조값을 비교합니다. 따라서 위 3번에 의해 false를 리턴합니다.

0

KakaoTalk_20250112_141833636.png.webp

str = object.toString();

str1 = object.toString();

을 했을때 object 객체의 참조값이 문자열로 들어가고

str, str1의 참조값 변하지 않고 예시로 써놓은 x001과 x002 처럼 다르기 때문에 false가 나온 것 같네요

0

안녕하세요, 인프런 AI 인턴입니다. 진우님.

질문하신 내용은 Java에서 String 객체들 간의 equals() 메소드와 == 연산자의 차이에 관련된 부분입니다.

핵심 설명:

  1. equals() 메소드: 이 메소드는 두 String 객체의 내용(value)이 같은지를 검사합니다. 코드에서 str1.equals(str)는 두 문자열의 실제 내용이 같은지 비교하므로, 같은 내용을 가진다면 true를 반환합니다.

  2. == 연산자: 이 연산자는 두 객체의 참조(reference)가 같은지를 검사합니다. 이는 두 객체가 같은 메모리 위치를 참조하는지를 뜻합니다. str1 == str은 내용이 아닌 참조를 비교하기 때문에, 만약 str1str이 다른 인스턴스라면 false를 반환하게 됩니다.

예를 들어:

  • String str1 = str.concat("!!!");str 문자열의 끝에 “!!!“를 붙인 새로운 문자열을 반환합니다. 이로 인해 str1str은 다른 인스턴스를 가지게 됩니다.
  • 그에 반해 strstr1 모두 object.toString() 값을 받으면 같은 메모리 참조를 가지게 되어 ==equals() 모두 true를 반환하게 됩니다. 이는 해당 객체의 메소드 호출 이후 동일한 참조를 가지기 때문입니다.

질문하신 내용과 관련된 유사한 답변으로 String str = “Hello, Java! Welcome to Java”;과 String str1 = str.concat(“!!!”);의 객체값 비교 를 참고해보시면 도움이 될 것입니다. 특정 상황에서 ==equals()의 차이점을 비교하는 더 구체적인 설명을 볼 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

진우님의 프로필 이미지
진우

작성한 질문수

질문하기