[JAVA]/10. API

03. String pool (문자열의 저장소)

76beny 2022. 4. 15. 21:50

목차

- 목차

 


String 사용 tip

 1. String 의 저장소는 Heap과 String constant pool두가지가 있다.
 2. String constant pool을 사용하는 것이 메모리 관리측면세어 유리하다.
 3. String 은 new 생성하지 않는다,
 4.Haep을 생으로 생성하지 않는다.

 

* String pool이란? String존재하는 수영장(영역)!* 

 

코드예시

package com.kh.ex01.string_basic;

//문자열의 저장소//4월15일(21분)
public class StringConstruct {
	public static void main(String[] args) {
		// String pool test
		// String 사용 tip
		// 1. String 의 저장소는 Heap과 String constant pool두가지가 있다.
		// 2. String constant pool을 사용하는 것이 메모리 관리측면세어 유리하다.
		// 3. String 은 new 생성하지 않는다,
		// 4.Haep을 생으로 생성하지 않는다.

		// String pool이란? String존재하는 수영장(영역)!

		String str1 = "Test String";// 제일 표준 문법,String constant pool
		String str2 = new String("Test String");// 스캐너 사용같은 경우, Heap
		String str3 = str1.toString();// str1에 toString 찍어서 가져온거//Heap->heap constant pool
		String str4 = str3.intern();// String constant pool
		// .intern() 이란? ==와 같은기능! (속도빠르게 하려고 String에서 ==나equlas대신 사용함)
		// =>String constant pool로 바로연결

		// hashcode비교
		System.out.println(str1.hashCode());// 432811871
		// hashCode? 객체를 유일하게 식별하기 위한 대표값,유추할수 없다(왜냐 위의 Test를 test로 바꾸면 완전 값이 다르게바뀜)
		System.out.println(str2.hashCode());// 432811871, 1/40억의 확률(보안상 유추가 어렵다!)
		System.out.println(str3.hashCode());// 432811871
		System.out.println(str4.hashCode());// 432811871

		// equal의 문자열비교 원리는 hashCode기반으로 비교함
		System.out.println(str1.equals(str2));// true
		System.out.println(str1.equals(str3));// true
		System.out.println(str1.equals(str4));// true
		// 위의 결과가 전부true인 이유는 해시코드가 동일하기 때문!

		// ==는 의 비교 원리는 메모리의 주소값을 비교한다!
		System.out.println(str1 == str2);// flase
		System.out.println(str1 == str3);// true//str3은 str1의 문자열 출력하는 String메소드
		System.out.println(str1 == str4);// true

		// 메모리주소출력의 기능 : identityHashCode
		System.out.println(System.identityHashCode(str1));// 617901222
		System.out.println(System.identityHashCode(str2));// 1159190947
		System.out.println(System.identityHashCode(str3));// 617901222
		System.out.println(System.identityHashCode(str4));// 617901222

		// 문자열 초기화하는 방법(강사추천문법)//맨위 방법처럼 초기화하는것은 하드코딩!
		String temp = " "; // 공백으로 초기화, null로 초기화 하면 null이 기본으로 출력됨, 공백으로 초기화하면 아무값도 출력이 안됨!
		temp += "123" + "," + "홍길동"; // null에러가 발생하지도 않고 쓰기 편리하다.

	}

}

 

 

 


"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.

이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우

민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."