본문 바로가기
Java

[Java] .equals("")와 .isEmpty()의 차이

by 작은돼지 2022. 8. 1.

빈 문자열을 input하면 예외가 발생하는 지 확인해보는 테스트이다.

    @DisplayName("빈 값이면 예외 발생")
    @Test
    void inputEmpty() {
        Assertions.assertThatIllegalArgumentException()
                .isThrownBy(() -> new PasswordChecker().check(""));
    }

    // isEmpty() 사용
    public void check(String password) {

            if (password.isEmpty()) {
                throw new IllegalArgumentException();
            }

    }
    
    // equals("") 사용
    public void check(String password) {

            if (password.equals("")) {
                throw new IllegalArgumentException();
            }

    }

해당 코드에서 .equals("")와 .isEmpty()는 같은 기능을 하지만 동작 과정은 다르다.

 

1. equals()의 내부 코드

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

-> 참조값 비교

-> String 클래스인지 확인

-> 길이가 다른지 확인

-> 길이가 같다면 한 문자씩 내용을 비교

 

2. isEmpty()의 내부 코드

public boolean isEmpty() {
        return value.length == 0;
    }

-> 길이만 비교

 

정리

equals()의 경우 문자열의 내용을 비교하므로 입력받은 ""과 ""의 내용을 비교하는 방식으로 작동하고

isEmpty() 메서드는 문자열의 길이가 0인지만 확인하므로 더 간단하다.

 

예제 코드와 같이 빈 문자열인지 확인하는 경우에는

.isEmpty() 메서드를 사용하여 보다 더 명시적이고 간단한 방법으로 확인할 수 있다.