본문 바로가기

JAVA/개념

JAVA :: equals() 메서드와 == 연산자 차이

 

equals() 메서드

Object 클래스의 메서드. 이는 == 연산자와 동일하게 주소값을 비교를 수행하는 메서드이다. 문자열 비교를 위해 사용하는 equals()의 경우 String 클래스에서 오버라이딩을 함으로써 문자열 간의 비교가 가능하다

== 연산자

== 연산자의 경우 객체의 주소값을 비교합니다. 그래서 비교하는 객체가 동일한 객체인지를 판별한다.윈시타입(실제 데이터 값이 저장된 경우)의 객체에 대해서는 값 비교가 가능하고, 참조타입(객체의 주소값을 참조하는 경우)에 대해서는 주소 비교를 수행한다

 

 

예시 문제
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ s1, s2의 길이 ≤ 100
1 ≤ s1, s2의 원소의 길이 ≤ 10
s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
s1과 s2는 각각 중복된 원소를 갖지 않습니다.


입출력
s1                         s2                                   result
["a", "b", "c"]      ["com", "b", "d", "p", "c"]      2
["n", "omg"]        ["m", "dot"]                          0

 

 

정답 

 

  class Solution {

  public int solution(String[] s1, String[] s2) {

  int answer = 0;

  for(int i=0;i<s1.length;i++){

  for(int j=0;j<s2.length;j++){

  if(s1[i].equals(s2[j])){

  answer++;

  }}}

  return answer;

  }}

 

== 연산자를 사용시 틀린 이유

if(s1[i] == s2[j]){

answer++;

}

 

s1[i] 객체의 주소값과 s2[j] 객체의 주소값을 비교하게 되므로 == 연산자 사용시 false가 나오게 된다

따라서 answer의 값이 0에서 오르지 않으므로 answer은 계속 0이 출력된다