게으른 개발자의 끄적거림

Java equals(), ==, contains() 예시 및 차이점

끄적잉 2024. 5. 21. 21:46
반응형

Java equals() == contains(Java의 `equals()`, `==`, 그리고 `contains()` 메서드는 객체와 데이터를 비교하거나 특정 데이터를 포함하고 있는지 확인하는 데 사용됩니다. 각 메서드는 특정한 목적과 사용 방식을 가지고 있으며, 이를 정확히 이해하고 사용하는 것이 중요합니다. 다음은 각각의 메서드에 대한 설명과 예시, 그리고 그 차이점을 상세하게 설명한 내용입니다.

 

 


### 1. `==` 연산자

`==` 연산자는 두 변수가 같은 객체를 참조하는지 비교합니다. 이는 두 객체의 메모리 주소를 비교하는 연산자입니다. 기본 데이터 타입(primitive type)과 객체 참조(reference type) 모두에 사용할 수 있지만, 사용되는 방식이 다릅니다.

#### 기본 데이터 타입(Primitive Type)에서의 `==`

기본 데이터 타입에는 `int`, `char`, `boolean`, `float`, `double` 등이 있습니다. 이 타입의 변수에 `==` 연산자를 사용하면 값 자체를 비교합니다.

```java
int a = 10;
int b = 10;
System.out.println(a == b); // true
```

위의 예제에서는 `a`와 `b`가 같은 값을 가지고 있으므로 `==` 연산자는 `true`를 반환합니다.

#### 객체 참조(Reference Type)에서의 `==`

객체 참조 타입에는 `String`, `Integer`, `CustomObject` 등이 있습니다. 이 타입의 변수에 `==` 연산자를 사용하면 두 변수가 동일한 객체를 참조하는지 비교합니다.

```java
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false
```

위의 예제에서는 `str1`과 `str2`가 같은 문자열 값을 가지고 있지만, 서로 다른 객체를 참조하고 있으므로 `==` 연산자는 `false`를 반환합니다.

#### 예시 코드

```java
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println(str1 == str2); // true, 같은 리터럴을 참조
System.out.println(str1 == str3); // false, str3는 새로운 객체
```

여기서 `str1`과 `str2`는 자바의 문자열 풀(string pool)에 의해 동일한 리터럴을 참조하기 때문에 `true`를 반환합니다. 반면 `str3`는 새로운 객체이므로 `false`를 반환합니다.

 

반응형

 


### 2. `equals()` 메서드

`equals()` 메서드는 두 객체의 내용이 동일한지 비교합니다. 기본적으로 `Object` 클래스에 정의되어 있으며, 이를 각 클래스에서 오버라이드하여 자신만의 비교 방식을 정의할 수 있습니다.

#### 기본 `equals()` 메서드

`Object` 클래스의 기본 `equals()` 메서드는 `==` 연산자와 동일하게 동작합니다.

```java
public boolean equals(Object obj) {
    return (this == obj);
}
```

#### 오버라이드된 `equals()` 메서드

많은 클래스에서는 `equals()` 메서드를 오버라이드하여 객체의 내용을 비교합니다. 예를 들어, `String` 클래스에서는 문자열의 내용을 비교하도록 오버라이드되어 있습니다.

```java
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // true
```

위의 예제에서는 `str1`과 `str2`가 같은 문자열 내용을 가지고 있으므로 `equals()` 메서드는 `true`를 반환합니다.

#### 예시 코드

```java
class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }
}

Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);
System.out.println(p1.equals(p2)); // true
```

여기서 `Person` 클래스의 `equals()` 메서드를 오버라이드하여 이름과 나이가 같은지를 비교합니다. `p1`과 `p2`는 같은 내용이므로 `equals()`는 `true`를 반환합니다.

 

 

 

 


### 3. `contains()` 메서드

`contains()` 메서드는 특정 컬렉션(Collection)이나 문자열에 특정 요소나 문자열이 포함되어 있는지 확인하는 데 사용됩니다.

#### 문자열에서의 `contains()`

`String` 클래스에서 `contains()` 메서드는 주어진 문자열이 부분 문자열로 포함되어 있는지 확인합니다.

```java
String sentence = "The quick brown fox jumps over the lazy dog";
System.out.println(sentence.contains("quick")); // true
System.out.println(sentence.contains("slow")); // false
```

위의 예제에서는 `sentence` 문자열에 "quick"이 포함되어 있으므로 `true`를 반환하고, "slow"는 포함되어 있지 않으므로 `false`를 반환합니다.

#### 컬렉션에서의 `contains()`

`List`, `Set`과 같은 컬렉션에서 `contains()` 메서드는 주어진 객체가 컬렉션에 포함되어 있는지 확인합니다.

```java
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

System.out.println(list.contains("banana")); // true
System.out.println(list.contains("grape")); // false
```

위의 예제에서는 `list`에 "banana"가 포함되어 있으므로 `true`를 반환하고, "grape"는 포함되어 있지 않으므로 `false`를 반환합니다.

#### 예시 코드

```java
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);

System.out.println(set.contains(2)); // true
System.out.println(set.contains(5)); // false
```

여기서 `set`에 2가 포함되어 있으므로 `true`를 반환하고, 5는 포함되어 있지 않으므로 `false`를 반환합니다.

### 차이점 요약

- `==` 연산자는 두 변수가 동일한 객체를 참조하는지(메모리 주소가 같은지)를 비교합니다. 주로 객체 참조 비교에 사용됩니다.
- `equals()` 메서드는 두 객체의 내용이 같은지 비교합니다. 객체의 동등성(equality)을 정의하는 메서드로, 클래스에 따라 오버라이드하여 사용됩니다.
- `contains()` 메서드는 컬렉션이나 문자열 내에 특정 요소나 문자열이 포함되어 있는지 확인합니다. 이는 주로 `Collection` 인터페이스나 `String` 클래스에서 사용됩니다.

이처럼 각 메서드는 사용하는 상황과 목적이 다르므로 올바르게 사용해야 합니다. `==` 연산자는 객체 참조 비교에, `equals()` 메서드는 객체 내용 비교에, 그리고 `contains()` 메서드는 포함 여부 확인에 사용됩니다. 이러한 차이점을 이해하고 적절히 사용하는 것이 자바 프로그래밍에서 중요한 부분입니다.) 예시 및 차이점

반응형