자바 에는 어떤 조작 문자열 의 종류 가 있 습 니까?차이 가 어디 에 있 습 니까?

문자열 을 조작 하 는 종 류 는 어떤 것들 이 있 습 니까?차이 가 뭐 예요?
작업 문자열 의 종 류 는 주로 String 류,StringBuffer 류,StringBuilder 류 세 개 를 사용 합 니 다.
가 변 문자열
String 클래스

public class StringTest {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");	
        System.out.println(s1 == s2);	// true
        System.out.println(s2 == s3);	// false
        s2 = "abc" + "def";
        System.out.println(s1 == s2);	// false
        String s4 = "abcdef";
        System.out.println(s4 == s2);	// true
    }
}
1.String 클래스 를 초기 화 할 때 상수 탱크 에 대상 을 만 들 고 s1 이 상수 탱크 의 주 소 를 가리 키 는 것 을 참조 합 니 다.
2.s2 를 만 들 때 상수 탱크 에=대상 이 있 는 지 확인 하고 있 으 면 s2 를 상수 탱크 에 있 는"abc"로 직접 가리 키 기 때문에 s1 과 s2 는 같은 대상 을 가리킨다.
3."abc"키 워드 를 사용 하여 String 대상 을 만 들 때 쌓 인 공간 에서 메모리 하 나 를 열 고 쌓 인 상태 에서 s3 를 초기 화 합 니 다.s3 는 쌓 인 메모리 공간의 한 구역 을 가리 키 고 있 습 니 다.
4.우리 가 s2 를 수정 할 때 사실은 상수 탱크 에 새로운 대상new을 추가 한 것 입 니 다.이때 우 리 는 새로운 대상 s4 를 만 드 는 것 과 s2 를 만 드 는 절차 가 같 습 니 다.s4 는 상수 탱크 에서"abcdef"을 찾 았 기 때문에 이 대상 을 직접 가리 키 고 있 습 니 다.
우리 가 String 형식의 변 수 를 조작 할 때,사실은 매번 변 경 될 때마다 새로운 대상 을 제외 하고 만 듭 니 다.
가 변 문자열
StringBuffer 와 StringBuilder 클래스 에서 문자열 을 추가 삭제 하 는 방법 을 제공 합 니 다.원본 대상 에 새로운 문 자 를 추가 하 는 예 시 를 보 여 줍 니 다.

public class StringTest2 {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("abc");
        StringBuilder sb2 = new StringBuilder("abc");
        System.out.println(sb1.hashCode());	// 460141958
        System.out.println(sb2.hashCode());	// 1163157884
        sb1.append("def");
        sb2.append("def");
        System.out.println(sb1.hashCode()); // 460141958
        System.out.println(sb2.hashCode()); // 1163157884
    }
}
이 예 를 통 해 우 리 는 s1 과 s2 가 원 소 를 증가 하 는 전후 에 여전히 같은 대상 임 을 뚜렷하게 볼 수 있다.
StringBuffer 와 StringBuilder 는 모두"abcdef"류 를 계승 했다.
StringBuffer 클래스
StringBuilder 클래스 와 비교 해 보면 StringBuffer 클래스 의 방법 은AbstractStringBuilder키 워드 를 사용 하지 않 았 습 니 다.

   @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }
StringBuilder 클래스

  @Override
    public synchronized StringBuffer append(Object obj) {
        toStringCache = null;
        super.append(String.valueOf(obj));
        return this;
    }
AbstractString Builder 클래스 의 append 방법
확장 방법:ensureCapacity Internal()방법 으로 초기synchronized공간 이 충분 한 지 확인 하고 부족 하면 확장 작업 을 합 니 다.

 public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        //         
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }

 private void ensureCapacityInternal(int minimumCapacity) {
        // overflow-conscious code
        //                  
        if (minimumCapacity - value.length > 0) {
            value = Arrays.copyOf(value,
                    newCapacity(minimumCapacity));
        }
    }
copy Of 방법:새로운 char 배열 을 다시 만 들 고 원래 배열 의 데 이 터 를 새 배열 로 복사 합 니 다.

    public static char[] copyOf(char[] original, int newLength) {
        char[] copy = new char[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

작은 매듭
자바 작업 문자열 의 종 류 는 주로 세 가지 가 있 는데 그것 이 바로 String 류,StringBuffer 류 와 StringBuilder 류 입 니 다.이 세 가지 종류의 바 텀 은 모두char[] value형식 으로 문자열 대상 을 저장 합 니 다.이들 의 차 이 는 주로 다음 과 같 습 니 다.
1.String 형식 을 수정 한 후 재 생 성 대상 에 해당 합 니 다.StringBuffer 와 StringBuilder 가 추가 삭제 작업 을 하 는 것 은 모두 같은 대상 을 대상 으로 합 니 다.
2.StringBuffer 의 대부분 방법 은 synchronized 키 워드 를 사용 하지 않 았 기 때문에 성능 이 더욱 좋 습 니 다(제 가 문 제 를 풀 때 도 이것 을 씁 니 다).단일 스 레 드 의 경우 StringBuffer 류 를 우선 사용 합 니 다.다 중 스 레 드 환경 에서 StringBuilder 류 를 사용 하여 스 레 드 안전 을 확보 해 야 합 니 다.
3.문자열 이 설명 한 후에 변경 할 필요 가 없다 면 String 류 가 가장 좋 은 선택 이 라 고 직접 설명 합 니 다.new 키 워드 를 사용 하지 않 고 String 대상 을 설명 할 때 메모리 에 공간 을 열 지 않 고 String 상수 풀 을 직접 가리 키 는 것 입 니 다.이렇게 하면 재 활용 을 실현 하고 자원 소 모 를 줄 일 수 있 습 니 다.
확장 읽 기
자바 기초 시리즈 1 탄 방법 재 업로드 와 방법 재 작성 의 차이
자바 기초 시리즈 2 탄 의 자바 다 중 멤버 접근 특징
자바 에 대해 어떤 조작 문자열 이 있 습 니까?차이 가 어디 에 있 습 니까?의 글 은 여기까지 소개 되 었 습 니 다.자바 작업 문자열 과 관련 된 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기