Java String 문자 풀

3674 단어 자바 기술
Java String 문자 풀:
자바 의 문자열 풀 은 무엇 입 니까?다음은 몇 개의 프로그램 세 션 을 통 해 설명 하 겠 습 니 다.(결과 대비)
1. new 를 사용 하여 자바 문자열 만 들 기
                String  a1 = new String("Hello");//메모리 에 a1 대상 을 만 듭 니 다. 내용 은 HelloString 입 니 다. a2 = new String("Hello");//메모리 에 a2 대상 을 만 듭 니 다. 내용 은 HelloSystem. out. println (a1 = = a2) 입 니 다. //falseSystem.out.println(a1.equals(a2));//true
2. 따옴표 로 자바 문자열 만 들 기
                String  a3 = "Hello";//스 택 메모리 에 변수 a3 를 만 듭 니 다. 내용 은 Hello 입 니 다.String  a4 = "Hello";//a4 변 수 는 스 택 에 중국의 Hello 내용 을 가리 키 고 있 습 니 다.그래서 a3, a4 가 유지 하 는 주소 값 은 System. out. println (a3 = = a4) 과 같 습 니 다. // trueSystem.out.println(a3.equals(a4));//true
3. 따옴표 생 성 문자열 과 new 생 성 문자열 을 비교 합 니 다.
                String a5 = "world";String a6 = new String("world");System.out.println(a5 == a6);  // false System.out.println(a5.equals(a6));// true
위의 세 단락 코드 에서 자바 문자열 의 두 가지 생 성 방식 의 차 이 를 비교 해 냈 습 니 다.
  "= =" 연산 자 는 변수의 값 을 비교 합 니 다. 기본 데이터 형식 이 든 인용 데이터 형식 이 든.
 equals () 방법 은 인용 대상 의 내용 값 을 비교 합 니 다.
                
           String  a3 = "Hello";           String  a4 = "Hello";
   왜 a3 = = a4 true 입 니 다. 따옴표 로 문자열 을 만 들 때 스 택 메모리 에 만 들 어 졌 고 문자 풀 에 같은 내용 의 문자열 값 이 존재 하면 a4 가 a3 을 가리 키 는 문자열 대상 참조 가 다시 만 들 지 않 습 니 다.그래서 a3 = = a4 작업 은 모두 같은 대상 의 주소 값 을 비교 하기 때문에 true;
     String  a1 = new String("Hello");     String  a2 = new String("Hello");
  한편, new 를 통 해 생 성 된 같은 내용 의 문자열 a1 = a2 작업 을 비교 한 후 false 입 니 다. new 작업 은 메모리 에 생 성 된 대상 이기 때문에 매번 new 작업 은 메모리 에 메모리 공간 을 다시 열 고 new 두 번 에 두 대상 을 만 듭 니 다. 두 대상 의 주 소 는 같 지 않 을 것 입 니 다. 그래서 = 비교 결 과 는 false 이지 만 equals () 는 대상 내용 을 비교 하기 때문에 true 입 니 다.(String 클래스 는 equals 방법 을 다시 썼 습 니 다)
결론: 비 교 를 통 해 '따옴표' 방법 으로 문자열 을 만 드 는 것 이 어느 정도 메모리 공간 을 절약 하 는 것 을 발견 했다.
여기 서 설명 하고 자 하 는 것 은 자바 문자열 풀 의 개념 입 니 다. 따옴표 로 만 든 자바 문자열 은 기본적으로 하나의 문자열 풀 에 있 습 니 다. 같은 내용 의 문자열 이 존재 하 는 것 을 감지 하면 이전에 만 든 대상 의 인용 을 직접 가리 키 는 변 수 를 가 리 킵 니 다. 같 지 않 으 면 문자열 풀 에 유일한 문자열 을 만 듭 니 다. 이 점 은 new 가 만 든 것 과 같 습 니 다.문자열 은 매우 큰 차이 가 있 습 니 다. new 는 매번 메모리 공간 을 열 고 내용 이 같 든 그렇지 않 든 자바 의 귀중 한 메모리 공간 을 낭비 합 니 다.
다음은 new 가 만 든 문자열 도 문자열 풀 에 추가 하여 메모리 공간 을 더욱 절약 하 는 것 입 니 다.
String 클래스 중 에... intern () 방법;
public String intern()

문자열 대상 의 규범화 표시 형식 을 되 돌려 줍 니 다.
클래스 String 에서 개인 적 으로 유지 되 는 빈 문자열 풀
intern 방법 을 호출 할 때 풀 에 이 String 대상 과 같은 문자열 equals(Object) 이 포함 되 어 있 으 면 풀 에 있 는 문자열 을 되 돌려 줍 니 다. 그렇지 않 으 면 이 String 대상 을 풀 에 추가 하고 이 String 대상 의 인용 을 되 돌려 줍 니 다.
이것 은 다음 과 같은 규칙 을 따른다. 임의의 두 문자열 st 에 대해 s.equals(t)true 일 때 s.intern() == t.intern()true 이다.
모든 글자 의 액면가 문자열 과 문자열 의 할당 상수 표현 식 은 intern 방법 으로 작 동 합 니 다. 문자열 의 액면가 값 은 자바 Language Specification 의 술부 3.10.5 에서 정 의 됩 니 다.
돌아 가기:
이 문자열 과 내용 은 같 지만 유일한 문자열 을 가 진 풀 에서 가 져 옵 니 다.
실례 1:
                String a5 = "world";String a6 = new String("world").intern();  // intern 방법 을 통 해 new 가 만 든 문자열 을 문자열 풀 에 추가 하여 System. out. println (a5 = = a6) 을 반복 하지 않도록 합 니 다.   // trueSystem.out.println(a5.equals(a6)); // true
실례 2:
                String  a1 = new String("Hello").intern();String  a2 = new String("Hello").intern();System.out.println(a1 == a2);  // trueSystem.out.println(a1.equals(a2));  // true
        
  문자열 주소 풀 에 추가 한 후 = = 같은 내용 의 문자열 을 비교 하 는 것 은 실제 같은 대상 의 주소 값 입 니 다. 결 과 는 반드시 true 이 고 메모리 공간 을 절약 합 니 다.

좋은 웹페이지 즐겨찾기