자바 JDK 의 원본 코드 를 기반 으로 String 1

잔소리 하 다: 자신의 블 로그 가 옮 겨 진 것 을 발 견 했 지만 출처 를 밝 히 지 않 아 아 아 프 고 즐 거 운 느낌 이 들 었 다.전재 출처 를 밝 혀 주 십시오. 감사합니다.상용 목적 이 있 으 면 반드시 본인 을 알 아야 합 니 다.
 
        시간 을 좀 내 서원본 코드 시작 설명: String 은 문자열 을 대표 합 니 다. 자바 의 모든 문자열 순 서 는 이 형식의 인 스 턴 스 입 니 다.String 은 고정 적 으로 변 하지 않 습 니 다. 그들의 값 은 분배 후에 바 꿀 수 없습니다.이 점 을 감안 하면 그들의 값 은 공유 할 수 있다.자바 언어 는 문자열 연결 연산 자 '+' 에 특별한 지원 을 제공 합 니 다. 콘 솔 에서 출력 할 때 + 이 기능 을 자주 사용 합 니 다.한 가지 설명 을 추가 하면 String 류 는 string pool 을 개인 적 으로 유지 하고 있 습 니 다. 이 저장 소 는 전역 에 유일한 문자열 을 저장 하고 있 습 니 다.많은 말 을 했 는데 어 지 럽 습 니 다. 그러나 몇 가지 키 워드 는 특히 주의해 야 합 니 다. 고정 불변, 공유, '+' 연산 자 에 대한 특수 지원, string pool.이 몇 개의 키 워드 는 자 바 를 처음 배 웠 을 때 느 낀 String 의 특수성 을 기본적으로 설명 할 수 있다.        먼저 string pool 을 말 합 니 다. 일반적으로 자바 에 서 는 기본 데이터 형식 과 인용 형식 이 스 택 에 저장 되 어 있 고 가리 키 는 대상 을 참조 하여 더미 에 저장 합 니 다.String 은 매우 특수 합 니 다. 이 두 구역 외 에 개인 적 인 string pool 이 있 습 니 다.우 리 는 이 특성 을 자주 사용 해 야 하지만 이 점 을 아 는 사람 이 별로 없다. sample:
		String str = "hello world";
		String str1 = new String("hello world");
		String str2 = new String("the world");

        첫 번 째 코드 에서 str 는 인용 형식 으로 string pool 에 저 장 된 'hello wolrd' 저장 소 를 가리 키 고 있 습 니 다.str 1, str 2 도 인용 형식 이지 만 그들 이 가리 키 는 유형 은 string pool 이 아니 라 쌓 여 있 습 니 다.str 2 는 더 특별 하 다, String str 2 = new String ("the world");실행 이 끝 난 후에 실제로 두 개의 메모 리 를 차 지 했 습 니 다. 하 나 는 쌓 여 있 고 하 나 는 string pool 에 있 습 니 다.사실 str 1 도 같 지만 변수 str 앞 에 string pool 에 영역 을 설명 하 였 으 며, string pool 의 값 은 유일 하 게 공유 되 었 기 때문에 str 1 은 다시 메모 리 를 할당 하지 않 았 습 니 다.String str 2 = new String ("...") 이라는 성명 은 매번 두 개의 메모리 영역 을 차지 합 니 다. 일상적인 프로 그래 밍 에서 거의 사용 하지 않 습 니 다. 바로 이 때 문 입 니 다.여기까지 string pool 은 기본적으로 말 하고 일 단락 을 지 을 수 있 습 니 다.이어서 문자열 의 비교, sample:
		if(str == str1){
			System.out.println("str == str1");
		}
		
		if(str.equals(str1)){
			System.out.println("str.equals(str1)");
		}

        위의 코드 가 실 행 된 후에 'str. equals (str 1)' 만 출력 합 니 다. = = 연산 자 는 주 소 를 기반 으로 하 는 것 이 고 str 는 string pool 을 가리 키 며 str 1 은 더 미 를 가리 키 며 대상 주 소 는 다 를 것 입 니 다. String 클래스 가 equals (Object anObject) 방법 을 다시 실현 하 는 것 은 내용 을 바탕 으로 비교 하 는 것 입 니 다.String 소스 코드 에 대한 설명 은 다음 과 같 습 니 다. 이 문자열 을 지정 한 object 와 비교 하면 object 가 null 이 아니 고 같은 문자열 서열 을 대표 하 는 String 대상 만 이 진실 입 니 다.예 를 하나 더 추가 합 니 다. sample:
		String sum = "+";
		if(sum.equals("+")){
			System.out.println("sum.equals("+")");
		}
		
		if(sum == "+"){
			System.out.println("sum == \"+\"");
		}

이 코드 는 "sum. equals ()" 를 출력 합 니 다. 화해시키다 "sum = =" + "라 는 두 문자열 은 앞에서 말 했 듯 이 sum 은 string pool 의 내용 을 가리 키 고 sting pool 에서 문자열 이 유일 하기 때문에 주소 와 내용 이 같 습 니 다.같은 이유 로 아래 코드 는 "sum 1. equals ()" 만 출력 합 니 다. 
		String sum1 = new String("+");
		if(sum1.equals("+")){
			System.out.println("sum.equals("+")");
		}
		
		if(sum1 == "+"){
			System.out.println("sum == \"+\"");
		}

       위의 기초 위 에서 이어서 intern () 방법 을 말 해 보 세 요. 이것 도 string pool 과 관련 되 지만 새로운 지식 이 없습니다.sample:
		String str = "hello world";
		String str1 = new String("hello world");

		
		if(str.intern() == str1.intern()){
			System.out.println("str.intern() == str1.intern()");
		}

이 코드 는 "str. intern () = str1. intern ()" 을 출력 합 니 다. 원본 코드 에서 intern () 방법 에 대한 설명 을 보십시오. 이 방법 은 문자열 의 규범 을 되 돌려 줍 니 다.String 개인 string pool 이 비어 있 을 때;이 방법 이 호출 되 었 을 때 string pool 에 equals (Object) 방법 에 따라 이 String 이 원 하 는 문자열 이 포함 되 어 있 으 면 이 문자열 을 되 돌려 줍 니 다.그렇지 않 으 면 이 문자열 은 string pool 에 추가 되 고 인용 을 되 돌려 줍 니 다.따라서 모든 문자열 s 와 t, s. intern () = t. intern () 은 s. equals (t) 가 진짜 일 때 만 진실 입 니 다.여기까지 말 하면 인터넷 이라는 방법 과 equal 의 기본 등가 를 이해 할 수 있다.
        오늘 은 여기까지.이상 의 내용 은 자신 이 총 결 한 것 이 니 잘못 이 있 으 면 지적 해 주 십시오. 매우 감 격 스 럽 습 니 다.

좋은 웹페이지 즐겨찾기