String 질문
133
20 asked

str하고 str1이 왜 ==비교로 false 값이 나오나요? 둘다 object.toString()값을 받으니까 아래println결과에서도 같게 나오는데..
[질문 내용]
여기에 질문 내용을 남겨주세요.
Answer 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()의 차이점을 비교하는 더 구체적인 설명을 볼 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
문제와 풀이
0
23
1
섹션 2 퀴즈 9번
0
33
2
강의노트 내용이 이해가 되지 않아서 문의드립니다.
0
48
1
중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문
0
68
1
setVlaue질문
0
94
3
안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.
0
94
1
findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?
0
75
1
아래 글처럼 toString() 강의부터 화면이 안보여요
0
99
2
TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함
0
84
2
오타 제보도 되나요?
0
90
2
지역 클래스 예제3 지역변수 질문
0
69
2
래퍼클래스 박싱 출력
0
60
1
자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문
0
105
3
강의록 오타 제보
0
69
2
자바의 기본 클래스들에 관하여
0
70
1
실무에서 중첩(내부) 클래스 사용하나요?
0
79
1
지역 클래스 - 지역 변수 캡처3
0
55
1
12:30 의 newClassGrade 질문이 있습니다.
0
57
1
날짜와 시간 문제풀이가 막히는데
0
100
2
내부 클래스의 바깥 클래스 참조
0
68
1
스트링 풀, new String()
0
105
3
정적 중첩 클래스 사용 이유
0
97
1
status.getCode() 대신 status.code 사용
1
81
1
메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련
0
75
1

