처음 자바를 배웠을때 같은 값을 비교하는데 ==과 equals() 메소드를 강사님이 번갈아 사용하셨다.
그때는 뭣모르고 따라치느라 이 두개의 차이점에 대해 잘 몰랐는데 공부를 하다보니 이런 기본적인 차이점을 아는 것이 중요하다고 생각하여 정리해보고자 한다.
`equals()` 와 `==`은 자바에서 객체 비교에 사용되는 방법이다.
같은 것인지 비교하는 것에서 공통점이 있지만 분명한 차이점이 존재한다.
equals() 메소드
equals() 메소드는 Object 클래스에서 상속받은 메소드로, 기본구현은 두 객체의 메모리 주소가 아닌 내용을 비교한다.
문자열(String) 클래스에서는 문자열의 내용을 비교하도록 오버라이딩 되어있기 때문에 간단하게 문자열의 비교를 할 수 있다.
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // true (st1과 str2의 내용이 같으므로)
WITH절
== 연산자는 두 객체의 메모리 주소를 비교한다.
즉, 두 객체가 동일한 객체인지 여부를 판단한다.
기본 데이터 타입(int, long, float, double, char, boolean 등) 의 경우 값 자체를 비교하고,
참조 데이터 타입(String, Array, Class, Interface, List등)의 경우에는 메모리 주소를 비교한다.
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false (서로 다른 객체이므로)
따라서 문자열(String)을 비교할 때는 equals() 메소드를 사용하는 것이 일반적이다.
두 문자열의 내용이 같은지를 비교하는 것이기 때문이며, 객체 비교를 한다면 다른 결과가 나올 수 있기 때문이다.
다만, 기본데이터 타입을 비교하는 경우에는 ==을 사용하여 값을 비교하는 것이 간단하고 효율적이다.
ex.
문자(char)와 문자열(String)을 비교할때의 차이점.
문자(char)는 기본데이터 타입으로, 내부적으로는 값 자체를 직접 비교할 수 있다.
따라서 `==`을 사용하여 두 문자를 비교하는 것이 효율적이다.
하지만 문자열(String)의 경우에는 다르다. 문자열은 객체로 다뤄지기 때문에 같은 값을 같는 문자열이라도 메모리에 따로 생성될 수 있다. 따라서 문자열의 내용을 비교할 때는 `==`이 아닌 `.equals()` 메소드를 사용하는 것이 안전하다.
'Language > Java' 카테고리의 다른 글
[Java] 숫자인지 문자인지 확인하기 / Character.isDigit() (1) | 2023.12.07 |
---|---|
[Java] JDBC와 Connection poll (1) | 2023.11.14 |
[Java] 스트림 요소를 하나의 문자열로 결합 / Collectors.joining() (0) | 2023.11.06 |
[Java] 접두사, 접미사인지 확인 / startsWith(), endsWith() (0) | 2023.11.05 |
[Java] 문자열을 숫자로 변환 / Integer.parseInt(), Interger.valueOf() (0) | 2023.11.04 |