인프런 커뮤니티 질문&답변
String 질문
작성
·
113
·
수정됨
답변 3
0
==연산자는 기본적으로 identity(동일) 비교를 수행합니다.
자바에서 기본형(int, float, ...)을 제외한 모든 것은 객체입니다.
따라서
String str과String str1은 (서로 다른) 객체입니다.
다만 그 객체가 담고 있는 값이object.toString()으로 동등할 뿐입니다.
즉 서로 다른 객체이기에 그 참조가 다릅니다(물리적으로 다른 위치). => 동일하지는 않다.println()에서str과str1의 값이 같게 출력되는 이유는 해당 메서드는println(str)과 같이 객체(str)가 argument로 전달된다면 (컴파일러에 의해) 자동적으로println(str.toString())과 같이 동작하게 됩니다.이때 String 객체(str)에 대한
toString()메서드는 참조값이 아닌 문자열 값을 리턴하도록 오버라이드되어 있습니다.따라서
println(str)과println(str1)은 둘 다object.toString()의 리턴값인 문자열 값을 리턴하기 때문에 같은 결과인 것입니다.또한 문자열 객체에 대한
equals()메서드는toString()메서드의 리턴 값을 비교하여 그 값이 같으면true를 리턴합니다(equality,동등성 비교). 따라서 위 6번에 따라true를 리턴합니다.하지만
==을 통한 비교는 identity, 동일성을 비교합니다. 이때 비교에 사용하는 것은 객체에 대한toString()값이 아니라, 객체의 참조값을 비교합니다. 따라서 위 3번에 의해false를 리턴합니다.
0

str = object.toString();
str1 = object.toString();
을 했을때 object 객체의 참조값이 문자열로 들어가고
str, str1의 참조값 변하지 않고 예시로 써놓은 x001과 x002 처럼 다르기 때문에 false가 나온 것 같네요
0
안녕하세요, 인프런 AI 인턴입니다. 진우님.
질문하신 내용은 Java에서 String 객체들 간의 equals() 메소드와 == 연산자의 차이에 관련된 부분입니다.
핵심 설명:
equals()메소드: 이 메소드는 두String객체의 내용(value)이 같은지를 검사합니다. 코드에서str1.equals(str)는 두 문자열의 실제 내용이 같은지 비교하므로, 같은 내용을 가진다면true를 반환합니다.==연산자: 이 연산자는 두 객체의 참조(reference)가 같은지를 검사합니다. 이는 두 객체가 같은 메모리 위치를 참조하는지를 뜻합니다.str1 == str은 내용이 아닌 참조를 비교하기 때문에, 만약str1과str이 다른 인스턴스라면false를 반환하게 됩니다.
예를 들어:
String str1 = str.concat("!!!");는str문자열의 끝에 “!!!“를 붙인 새로운 문자열을 반환합니다. 이로 인해str1과str은 다른 인스턴스를 가지게 됩니다.
- 그에 반해
str과str1모두object.toString()값을 받으면 같은 메모리 참조를 가지게 되어==와equals()모두true를 반환하게 됩니다. 이는 해당 객체의 메소드 호출 이후 동일한 참조를 가지기 때문입니다.
질문하신 내용과 관련된 유사한 답변으로 String str = “Hello, Java! Welcome to Java”;과 String str1 = str.concat(“!!!”);의 객체값 비교 를 참고해보시면 도움이 될 것입니다. 특정 상황에서 ==와 equals()의 차이점을 비교하는 더 구체적인 설명을 볼 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






