Equals() & ==
보완할 점
equals()가 hash값을 비교한다는 부분은 오해의 소지가 있어.equals()는 실제 문자열 내용을char[]배열 단위로 비교하고, 해시와는 관련 없어.스트링 풀이
equals()비교에 영향을 준다고 생각한 점은 오해야. 스트링 풀은==에만 관련 있어.equals()를 오버라이딩할 때hashCode()도 함께 오버라이딩해야 한다는 점을 놓쳤어.
Java에서 == 연산자와 equals() 메서드의 차이점은 무엇인가요?
== 연산자와 equals() 메서드의 차이점은 무엇인가요?==: 두 참조 변수가 동일한 객체를 참조하고 있는지(주소값) 비교.equals(): 두 객체가 논리적으로 같은 값인지 비교. (Object의 기본 구현은==과 같지만,String,Integer등은equals()를 오버라이딩하여 내용을 비교함)
그럼 String 클래스에서 equals()는 어떻게 동작하나요? 내부적으로 어떤 방식으로 문자열을 비교하나요?
String 클래스에서 equals()는 어떻게 동작하나요? 내부적으로 어떤 방식으로 문자열을 비교하나요?equals()는 문자열의 길이를 먼저 확인하고, 길이가 같다면 char 배열을 인덱스로 하나씩 비교하여 결과를 반환.스트링 풀 여부는
==에만 영향을 미침
그렇다면 new String("abc")로 두 개의 문자열을 만들고 equals()로 비교하면 어떤 결과가 나오고, 왜 그런 결과가 나오는지 설명해 줄 수 있을까?
new String("abc")로 두 개의 문자열을 만들고 equals()로 비교하면 어떤 결과가 나오고, 왜 그런 결과가 나오는지 설명해 줄 수 있을까?new String("abc")는 서로 다른 객체를 생성하지만 내부 문자열은 동일.equals()는 내부 문자열 비교이므로 결과는true.
String 클래스에서 equals()가 내부적으로 문자열을 하나씩 비교한다고 했는데, 구체적으로 어떤 메서드를 이용해서 비교하고, 그 비교는 어떤 방식(예: 어떤 루프나 조건문)으로 이루어지는지 알고 있어?
equals()가 내부적으로 문자열을 하나씩 비교한다고 했는데, 구체적으로 어떤 메서드를 이용해서 비교하고, 그 비교는 어떤 방식(예: 어떤 루프나 조건문)으로 이루어지는지 알고 있어?동등성 확인 (
==)타입 검사 (
instanceof)길이 비교
char[] 배열 비교
만약 두 문자열의 길이가 다르면 바로 false를 반환한다고 했는데, 왜 이런 순서를 먼저 두는 게 효율적인지 설명해 줄 수 있어?
길이 비교는 O(1) 연산으로, 두 문자열이 다르다는 걸 빠르게 판단할 수 있는 조건.
길이가 다르면 내용이 같을 수 없으므로 바로
false를 반환하는 게 성능상 유리함.
자바에서 equals()를 오버라이딩하는 클래스(예: 사용자 정의 클래스)를 만들 때, 어떤 점들을 주의해서 구현해야 할까? equals 관련된 다른 메서드와도 관련지어서 설명해줘.
equals()를 오버라이딩하는 클래스(예: 사용자 정의 클래스)를 만들 때, 어떤 점들을 주의해서 구현해야 할까? equals 관련된 다른 메서드와도 관련지어서 설명해줘.equals()오버라이딩 시 다음을 지켜야 함:reflexive: 자기 자신과는 항상 같아야 함
symmetric: A.equals(B) == B.equals(A)
transitive: A=B, B=C → A=C
consistent: 값이 바뀌지 않는 한 항상 같은 결과
null 비교 시 false 반환
hashCode()도 반드시 함께 오버라이딩해야 함.equals()로 논리적으로 같다고 판단되는 객체는 동일한hashCode()를 가져야HashMap,HashSet에서 문제 없음.
Last updated