제목은 기본적으로 모든 것을 말합니다. 나는 보통 이것을 함께 테스트 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 이 걱정되지 않거나 다른 방법으로 확인하는 경우 분명히 사용합니다 . 그것은 당신이 점검하고있는 것을 정확하게 보여줍니다. 비어 있는지 아닌지, 빈 문자열과 같은지 여부 를 걱정합니다.equals
false
s
s.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 ( “”) 시간의 약 절반이 걸린다는 것을 알았습니다.