자바 의 String, StringBuilder, StringBuffer 의 차이 점

3219 단어
자바 의 String, StringBuilder, StringBuffer 의 차이 점
String
문자열 상수
-
JDK1.0
StringBuilder
문자열 변수
스 레 드 가 안전 하지 않 습 니 다.
JDK1.0
StringBuffer
문자열 변수
스 레 드 보안
JDK1.5
삼자 구별
String 타 입 과 StringBuffer 타 입의 주요 성능 차 이 는 사실 String 이 가 변 적 이지 않 은 대상 이기 때문에 String 타 입 을 변경 할 때마다 새로운 String 대상 을 생 성 한 다음 에 포인 터 를 새로운 String 대상 에 가리 키 는 것 과 같 습 니 다.문자열 내용 을 자주 바 꾸 면 String 을 사용 하지 않 는 것 이 좋 습 니 다. 생 성 대상 마다 시스템 성능 에 영향 을 미 치기 때 문 입 니 다. 또한 메모리 에 인용 되 지 않 은 대상 이 많아 지면 JVM 의 쓰레기 수 거 기 GC 가 작 동 하기 시작 하고 프로그램 실행 속도 가 느 려 집 니 다.StringBuffer 형식 을 정의 하 는 대상 이 라면 문자열 내용 을 조작 할 때마다 새로운 대상 을 만 드 는 것 이 아니 라 StringBuffer 대상 자 체 를 조작 합 니 다.그래서 일반적으로 StringBuffer 를 사용 하 는 것 을 추천 합 니 다. 특히 문자열 대상 이 자주 바 뀌 는 경우.StringBuffer 는 synchronized 키 워드 를 가 질 수 있 는 방법 이 많 기 때문에 스 레 드 가 안전 하 다 는 것 을 보증 할 수 있 지만 StringBuilder 의 방법 은 이 키워드 가 없 기 때문에 스 레 드 안전 을 보장 할 수 없습니다.StringBuilder 클래스 는 StringBuffer 와 호 환 되 는 API 를 제공 합 니 다. 이 클래스 는 StringBuffer 의 간단 한 교체 로 설계 되 었 으 며 문자열 버퍼 가 하나의 스 레 드 에 사 용 될 때 사 용 됩 니 다.가능 하 다 면 이 종 류 를 우선 사용 하 는 것 을 권장 합 니 다. 대부분의 실현 에서 StringBuffer 보다 빠 르 기 때 문 입 니 다.양자 의 방법 은 기본적으로 같다.
어떤 특수 한 상황 에서 String 의 효율 은 String Buffer 보다 빠르다. 예 를 들 어:
String s1 = "123" + "456" + "789";
StringBuffer s2 = new StringBuffer("123").append("456").append("789");

첫 번 째 줄 코드 는 자바 가상 컴퓨터 에서 볼 때 사실은:
String s1 = "123456789";

컴 파일 기간 에 이미 완성 되 었 기 때문이다.
질문
public static void main(String[] args) {  
		String s1=new String("123");            
		String s2=new String("123");      
		System.out.println("s1==s2 :" + (s1==s2));  // false       
		   
		String s3="456";    
		String s4="456";  
		System.out.println("s3==s4 :" + (s3==s4));  // true 
	}
	
	  :
	s1==s2 :false
	s3==s4 :true

s1 과 s2 는 자바 가상 컴퓨터 가 메모리 new 를 쌓 고 나 온 두 String 대상 의 메모리 주소 입 니 다. 그들의 값 은 같 지만 = = 비교 하 는 것 은 주소 이기 때문에 false 입 니 다.s3 와 s4 는 상수 탱크 에 저 장 된 것 으로 상수 탱크 에서 '456' 이 가리 키 는 유일한 보존 문자열 대상 의 주소 이기 때문에 true 입 니 다.
public static void main(String[] args) {  
		String s1 = "123";                                          
		String s2 = "456";                                       
		String s12 = s1 + s2;  
		String s="123456";  
		System.out.println(s12==s); // false  
	}

변수 s1, s2 는 상수 탱크 의 주 소 를 저장 합 니 다.s1 + s2 를 실행 할 때 JVM 은 먼저 더미 에 StringBuilder 클래스 를 만 들 고 s1 이 가리 키 는 문자열 대상 으로 초기 화 를 완료 한 다음 append 방법 으로 s2 가 가리 키 는 문자열 을 통합 합 니 다. 이 어 StringBuilder 의 toString () 방법 으로 더미 에 String 대상 을 만 듭 니 다.마지막 으로 생 성 된 String 대상 의 주 소 를 변수 s12 에 저장 합 니 다.변수 s 는 상수 탱크 의 'abcd' 에 대응 하 는 문자열 대상 의 주 소 를 저장 합 니 다.s12 와 s 주 소 는 틀림없이 다 를 것 이다.
총결산
String: 소량의 문자열 작업 에 적용 되 는 경우
StringBuilder: 단일 스 레 드 에서 문자 버퍼 에서 대량 작업 을 하 는 경우 에 적 용 됩 니 다.
StringBuffer: 다 중 스 레 드 에서 문자 버퍼 에서 대량 작업 을 하 는 경우 적용
컴 파일 기간 에 확인 할 수 있 는 문자열 상수 입 니 다. String 이나 StringBuffer 대상 을 만 들 필요 가 없습니다.문자열 상수 의 '+' 연결 을 직접 사용 하 는 것 이 가장 효율 적 입 니 다.
posted @
2018-03-08 11:35 neu_장 강 읽 기 (
...) 댓 글 (
...) 모음 집 편집

좋은 웹페이지 즐겨찾기