본문 바로가기
Java/알고리즘

서울에서 김서방 찾기, "==" 와 ".equals()"의 차이

by 티코딩 2024. 1. 12.

문제 참 재밌다ㅋㅋ 근데 너무쉽네 근데 IDE에서는 되는데 왜 테스트가 실패하지? 했다.

IDE에서 처음 푼 방법은

public static String solution(String[] seoul) {
        int i = 0;
        int answer = 0;
        for(String kim : seoul){
            if(kim == "Kim"){
                answer = i;
            }
            i++;
        }
        return "김서방은 " + answer + "에 있다";
    }

이랬는데 잘 되길래 될줄알았다.

answer은 int형이라그런가? 싶어서 Integer.toString(answer) 해서 String형으로 바꿨는데도 자꾸 answer가 0으로 들어갔다.

그래서 뭐가 문제지하면서 수정해보면서 발견했다.

바로

if문에서 == 으로 해서 안됬던거였다.

public String solution(String[] seoul) {
        int answer = 0;
        for(int i = 0; i < seoul.length; i++){
            if(seoul[i].equals("Kim")){
                answer = i;
            }
        }
        return "김서방은 " + answer + "에 있다";
    }

.equals() 를 썼더니 바로 됐다.

왜 여기서만 안되는거지? 그래서 찾아봤다.

 

"==" 는 두 객체의 주소를 비교하는것이었다. 

".equals" 는 두 객체의 내용을 비교하는거다.

둘의 차이를 보자.

String str1 = new String("Hello");
String str2 = new String("Hello");

System.out.println(str1 == str2);       // false (다른 객체)
System.out.println(str1.equals(str2));  // true (내용이 같음)

같은 "Hello"지만,==했을땐 false. 다른객체이기 때문이다. 즉, 주소가 다르다.

.equals는 내용이 같으므로 바로 true.

이 차이를 이제 알다니..이제라도 알았으니 다행이다.

'Java > 알고리즘' 카테고리의 다른 글

없는 숫자 더하기  (0) 2024.01.17
나누어 떨어지는 숫자 배열(향상된 for문 꿀팁 idx++)  (0) 2024.01.16
음양 더하기  (0) 2024.01.12
콜라츠 추측  (0) 2024.01.09
두 정수 사이의 합  (1) 2024.01.08