해결된 질문
작성
·
208
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
전에 배웠던 내용과 혼란이 와서 문의남깁니다!
값 타입의 비교를 수강 중
동일성(identity) 비교 : 인스턴스의 참조 값을 비교, ==사용
동등성(equivalence) 비교 : 인스턴스의 값을 비교, equals 사용 이라고 가르쳐 주셨는데
int, char같은 기본형 타입은 call by value로 인스턴스의 값을 비교하고 ==을 사용하지 않나요?
그리고 String의 경우 참조형으로 call by Reference로 인스턴스의 참조 값을 비교하고 equals를 사용하는 것으로 알고 있는데 이 부분이 헷갈려서 정리가 잘 안됩니다 ㅠㅠ 설명 해주시면 감사하겠습니다!
===============
"인스턴스"를 간과하고 있었네요 이해 되었습니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
wlwlgoyo님의 질문에 대해서, 값 타입의 비교 방법에 대해 혼동이 있는 것 같아 설명드리겠습니다.
기본적으로 Java에서 기본형 타입(int, char 등)의 비교는 ==
연산자를 사용하여 값을 직접 비교합니다. 이는 기본형 타입이 메모리에 값을 직접 저장하기 때문입니다.
반대로 참조형 타입(String, 객체 등)의 경우 ==
연산자로 비교하면 참조 값(메모리 주소)을 비교하기 때문에, 실제 객체의 내용이 같더라도 다른 참조 값을 가지고 있다면 false
를 반환합니다. 따라서 참조형 타입의 경우 객체의 값을 비교하기 위해 equals()
메서드를 사용합니다.
String 타입에 대해서는 특별한 경우가 있습니다. 문자열 리터럴을 사용하여 생성된 String 객체는 String 풀에 저장되어 재사용됩니다. 즉, 같은 내용의 문자열 리터럴로 String 객체를 생성하면 같은 참조 값을 가지게 됩니다. 이 경우 ==
연산자로 비교해도 true
를 반환하지만, 이는 문자열 리터럴의 특별한 처리 때문이며, 일반적으로 String 객체를 비교할 때는 equals()
메서드를 사용하는 것이 맞습니다.
관련 내용에 대한 자세한 설명과 예시가 필요하신 경우, 다음 기존 답변이 도움이 될 것입니다:
equals()
사용에 관해서 설명하고 있습니다. 래퍼 클래스(Integer, String 등)도 참조형 타입이므로, 객체의 값을 비교하기 위해서는 equals()
메서드를 사용해야 합니다.위 내용을 종합하면, 기본형 타입과 참조형 타입의 비교 방법에는 차이가 있으며, 기본형 타입은 ==
을 사용하고 참조형 타입은 equals()
를 사용합니다. 특히 String 같은 래퍼 클래스나 참조형 타입의 값 비교에 있어서는 equals()
메서드의 사용이 필수임을 알 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.