[java] string.isEmpty () 또는“”.equals (string)을 사용해야합니까?

제목은 기본적으로 모든 것을 말합니다. 나는 보통 이것을 함께 테스트 string == null하고 있으므로 null 안전 테스트에 대해서는 실제로 걱정하지 않습니다. 어느 것을 사용해야합니까?

String s = /* whatever */;
...
if (s == null || "".equals(s))
{
    // handle some edge case here
}

또는

if (s == null || s.isEmpty())
{
    // handle some edge case here
}

그 메모에서- 또는 isEmpty()이외의 다른 작업을 수행 합니까?return this.equals("");return this.length() == 0;



답변

가장 큰 장점은 null 검사 가 필요"".equals(s) 하지 않다는 것입니다 ( 인수를 확인하고 null 인 경우 반환 합니다). null 이 걱정되지 않거나 다른 방법으로 확인하는 경우 분명히 사용합니다 . 그것은 당신이 점검하고있는 것을 정확하게 보여줍니다. 비어 있는지 아닌지, 빈 문자열과 같은지 여부 를 걱정합니다.equalsfalsess.isEmpty()s


답변

String.equals("")실제로는 isEmpty()전화 보다 조금 느립니다 . 문자열은 변경할 수 없으므로 문자열은 생성자에서 초기화 된 카운트 변수를 저장합니다.

isEmpty() equals는 count 변수를 0과 비교하지만 equals는 유형, 문자열 길이를 확인한 다음 크기가 일치하는 경우 비교를 위해 문자열을 반복합니다.

따라서 귀하의 질문에 대답하기 위해 isEmpty()실제로 훨씬 덜 할 것입니다! 그리고 그것은 좋은 것입니다.


답변

언급 한 다른 문제 외에도 고려해야 할 한 가지는 isEmpty()1.6에 도입 된 것이므로이를 사용하면 Java 1.5 이하에서 코드를 실행할 수 없습니다.


답변

Apache Commons StringUtils isEmpty () 또는 isNotEmpty ()를 사용할 수 있습니다 .


답변

실제로 중요하지 않습니다. "".equals(str)내 의견으로는 더 명확합니다.

isEmpty()리턴 count == 0;


답변

성능을 테스트 할 수있는 테스터 클래스를 작성했습니다.

public class Tester
{
    public static void main(String[] args)
    {
        String text = "";

        int loopCount = 10000000;
        long startTime, endTime, duration1, duration2;

        startTime = System.nanoTime();
        for (int i = 0; i < loopCount; i++) {
            text.equals("");
        }
        endTime = System.nanoTime();
        duration1 = endTime - startTime;
        System.out.println(".equals(\"\") duration " +": \t" + duration1);

        startTime = System.nanoTime();
        for (int i = 0; i < loopCount; i++) {
            text.isEmpty();
        }
        endTime = System.nanoTime();
        duration2 = endTime - startTime;
        System.out.println(".isEmpty() duration "+": \t\t" + duration2);

        System.out.println("isEmpty() to equals(\"\") ratio: " + ((float)duration2 / (float)duration1));
    }
}

.isEmpty ()를 사용하면 .equals ( “”) 시간의 약 절반이 걸린다는 것을 알았습니다.


답변