자바 빈 문자열 에 대한 판단

2612 단어 자바빈 문자열
동료 가 직접 str = = "로 문자열 이 비어 있 는 지 아 닌 지 를 판단 하 는 것 을 보고 이전 에는 사용 해 본 적 이 없어 신기 했다.집에 가서 인터넷 에 접속 해서 자바 문자열 이 비어 있 는 지 아 닌 지 를 판단 하 는 네 가지 방법 이 있 습 니 다.
문자열 String str = "가 있다 고 가정 합 니 다.
1. "".equals(str);//true
2. str.length()==0;//true
3. str.isEmpty();//true, jdk 6 이후 의 새로운 방법.
4. str == "";//true
만약 에 몇 억 번 의 순환 을 통 해 이 네 가지 방법의 운행 효율 을 테스트 한다 면 첫 번 째 는 가장 느 리 고 세 가지 시간 차이 가 많 지 않 으 며 나 초 급 을 비교 하면 마지막 판단 방법 이 가장 빠르다.
인터넷 에서 도 마지막 하 나 는 가장 직관 적 이 고 추천 하 는 문법 이 라 고 말한다.
그러나 자바 를 배 울 때 문자열 을 배 울 때 모든 자 료 를 반복 적 으로 강조 하 였 습 니 다. 문자열 이 같은 지 비교 할 때 = =, equals () 방법 을 사용 해 서 는 안 됩 니 다. 빈 문자열 에 대해 서 는 예외 입 니까?
간단하게 몇 가지 테스트 방법 을 써 서 테스트 했다.
1. 다음 에 되 돌아 오 는 것 은 true 입 니 다. 문자열 상수 가 문자열 상수 탱크 에 저장 되 어 있 고 같은 문자열 이 상수 탱크 에 한 부 만 저장 되 어 있 기 때문에 아래 의 두 빈 문자열 이 인용 한 주 소 는 같 기 때문에 true 입 니 다.
public class TestString
{
    public static void main(String[] args){
        String str = "";
        System.out.println(str=="");//true
    }
}

2. 계속 테스트 하면 다음 결과 도 true 이 고 원인 은 같다.
     String str = "abc";
     System.out.println(str=="abc");//true

3. 계속 테스트 해 보 세 요. 다음 결 과 는 트 루 입 니 다.이 유 를 자세히 따 져 보면 컴 파일 러 가 컴 파일 할 때 코드 를 최적화 시 켰 기 때 문 일 것 이다. 이런 쓰기 방법 으로 얻 은 바이트 코드 파일 은 위의 것 과 같 아야 한다.
     String str = "a" + "bc";
     System.out.println(str=="abc");//true

4. 다음 결 과 는 false 입 니 다. 문자열 을 연산 하 였 기 때문에 이때 얻 은 변수 str 는 값 도 "abc"이지 만 메모리 주 소 를 가리 키 는 "abc"이기 때문에 결 과 는 false 입 니 다.
     String str = "a";
     String str += "bc";
     System.out.println(str=="abc");//false

일반적으로 비슷 한 연산 결과 가 빈 문자열 인 경 우 는 나타 나 지 않 으 며, 네 번 째 방법 으로 빈 문자열 인지 아 닌 지 를 직접 판단 할 수 있 을 것 같다.그런데 정말 그런 가요?
5. 상기 테스트 를 계속 하면 일반적으로 우리 가 얻 은 문자열 은 함수 반환 값 입 니 다. 만약 함수 가 빈 문자열 을 return 으로 되 돌려 준다 면.의 형식 으로 되 돌아 가 이등 호 로 판단 하 는 것 은 자연히 가능 하 다.그러나 또 다른 흔히 볼 수 있 는 상황 은 함수 에서 여러 번 수 정 된 문자열 에 대해 StringBuffer 로 작 동 합 니 다.마지막 으로 toString () 으로 문자열 을 되 돌려 줍 니 다. 이때:
        StringBuffer sb = new StringBuffer();
        //... ... 
        //假如在一系列操作后,sb仍为空。
        System.out.println(sb.toString().length() == 0);//true
        System.out.println(sb.toString() == "")//false

StringBuffer 클래스 의 문자열 은 메모 리 를 가리 키 기 때 문 입 니 다.
종합 적 으로 말하자면, 우리 가 명확 하지 않 게 호출 된 함수 내부 에서 실 현 될 때, 빈 문자열 로 판단 하지 않 는 것 이 가장 좋다.
두 번 째 와 세 번 째 방법 을 추천 합 니 다.

좋은 웹페이지 즐겨찾기