Beny's Study

22_1. [강의] 문자열의 저장소 본문

[JAVA]/10. API

22_1. [강의] 문자열의 저장소

76beny 2022. 5. 29. 10:58

String 사용 tip

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

 

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

 

String constant pool

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로 바로연결

.intern() 이란? 

==와 같은기능! (속도빠르게 하려고 String에서 ==나equlas대신 사용함)

 

hashcode비교

System.out.println(str1.hashCode());
System.out.println(str2.hashCode()); 1/40억의 확률(보안상 유추가 어렵다!)
System.out.println(str3.hashCode());
System.out.println(str4.hashCode());

hashCode

객체를 유일하게 식별하기 위한 대표값,유추할수 없다(왜냐 위의 Test를 test로 바꾸면 완전 값이 다르게바뀜)

 

[출력]

432811871
432811871
432811871
432811871

 

equal의 문자열비교

System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
System.out.println(str1.equals(str4));

*  equal의 문자열비교 원리는 hashCode기반으로 비교함

 

[출력]

true
true
true

 

*위의 결과가 전부true인 이유?

  해시코드가 동일하기 때문!

 

==는 의 비교

System.out.println(str1 == str2);
System.out.println(str1 == str3); //str3은 str1의 문자열 출력하는 String메소드
System.out.println(str1 == str4);

* ==는 의 비교 원리는 메모리의 주소값을 비교한다!

str3은 str1의 문자열 출력하는 String메소드

 

[출력]

false
true
true

 

 메모리주소출력 (identityHashCode)

System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
System.out.println(System.identityHashCode(str3));
System.out.println(System.identityHashCode(str4));

메모리주소출력의 기능 : identityHashCode

 

[출력]

617901222
1159190947
617901222
617901222

 

 

문자열 초기화

String temp = " "; 
// 공백으로 초기화, null로 초기화 하면 null이 기본으로 출력됨, 
//공백으로 초기화하면 아무값도 출력이 안됨!


temp += "123" + "," + "홍길동"; 
// null에러가 발생하지도 않고 쓰기 편리하다.


temp = temp +  "123" + "," + "홍길동";
//위와 같음

 


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

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

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

 

'[JAVA] > 10. API' 카테고리의 다른 글

22_3. [강의] String 메소드  (0) 2022.05.29
22_2. [강의] API 파싱 (영화정보)  (0) 2022.05.29
21. Format 관련 클래스  (0) 2022.04.15
20.Date, Calendar 날짜 관련 클래스  (0) 2022.04.15
19. Wrapper  (0) 2022.04.15