java String의 intern 방법
JDK1.6의 intern:
intern 방법을 호출할 때 먼저 상량 탱크에 가서 현재 String 값과 같은 값이 있는지 확인하고 존재하면 상량 탱크에 있는 이 String 값의 인용을 되돌려줍니다.존재하지 않으면 원래 쌓인 문자열을 상수 탱크로 복사합니다.
JDK1.7의 intern:
intern 방법을 호출할 때 먼저 상량 탱크에 가서 현재 String 값과 같은 값이 있는지 확인하고 존재하면 상량 탱크에 있는 이 String 값의 인용을 되돌려줍니다.존재하지 않으면 원래 쌓인 문자열의 인용만 상수 탱크에 놓고 전체 문자열을 상수 탱크로 복사하지 않습니다.
즉, JDK1.6과 JDK1.7은 상수 풀에 이 문자열이 존재하지 않는 경우와 다르게 처리됩니다.
다음은 실례를 통해 검증하고 설명한다.
인스턴스:
public static void main(String[] args) {
String str = "str"+new String("01");①
str.intern();②
String str1 = "str01";③
System.out.println(str == str1);
String str2 = new String("str01");④
str2.intern();⑤
String str3 = "str01";⑥
System.out.println(str2 == str3);
String str4 = "str01";⑦
String str5 = new String("str")+new String("01");⑧
str5.intern();⑨
System.out.println(str4 == str5);
JDK1.6에서 출력한 결과는 다음과 같습니다.false
false
false
설명:
① 실행할 때 메모리에'str01'이라는 문자열 대상str를 만들고 상수 탱크에'str'와'01'상량을 만든다.
② 실행할 때 먼저 상수 탱크에 "str01"의 상수가 존재하는지 확인하고, 존재하지 않는 것을 발견한다. JDK1.6의 방법은 이 문자열'str01'을 상수 탱크에 생성하는 것이다.
③ 실행할 때 상수 탱크에 "str01"대상을 만들고 존재하기 때문에 새로 만들지 않습니다.
첫 번째 출력false의 원인은str는 메모리를 쌓는'str01'을 가리키고str1은 상량 탱크의'str01'을 가리킨다.
④ 실행할 때 메모리에'str01'이라는 문자열 대상str2를 만들고 상수 탱크에'str01'이라는 상수를 만듭니다.
⑤ 실행할 때 먼저 상량 탱크에 가서 "str01"의 상량이 존재하는지 확인하고 존재하는 것을 발견하면 이 상량 인용을 되돌려줍니다.
⑥ 실행할 때 상수 탱크에 "str01"값의 상수를 만들고 존재하는 것을 발견하면 만들지 않습니다.
두 번째 출력false의 원인은str2가 가리키는 것은 메모리를 쌓는'str01'이고str3가 가리키는 것은 상량 탱크의'str01'이다.
⑦ 실행할 때 상수 탱크에'str01'이라는 값을 생성합니다.
⑧ 실행할 때 메모리에'str01'이라는 문자열 대상str5를 만들고 상수 탱크에'str'와'01'상량을 생성합니다.
⑨ 실행할 때 상량 탱크에 가서'str01'의 상량이 존재하는지 확인하고 존재하는 것을 발견하면 이 상량 인용으로 되돌아간다.
세 번째 출력false의 원인은str5는 메모리를 쌓는'str01'을 가리키고str4는 상량 탱크의'str01'을 가리킨다.
JDK1.7에서 출력한 결과는 다음과 같습니다.
true
false
false
설명:
첫 번째 출력 결과만 다르다는 것을 발견했기 때문에 우리는 첫 번째 원인만 설명한다.
① 실행할 때 메모리에'str01'이라는 문자열 대상str를 만들고 상수 탱크에'str'와'01'상량을 만든다.(JDK1.6과 다를 바 없음)
② 실행할 때 먼저 상수 탱크에 "str01"의 상수가 존재하는지 확인하고 존재하지 않는 것을 발견한다. JDK1.7의 방법은 메모리에 있는 "str01"의 인용을 상수 탱크에 복사하는 것이다.
③ 실행할 때 상수 탱크에 "str01"대상을 만들고 존재하기 때문에 새로 만들지 않습니다.
그러면 이때str와str1은 메모리에 쌓인'str01'의 값을 가리키기 때문에 둘은 같다.
이상은 JDK1.6과 JDK1.7 중 String류의intern 방법에 대한 비교입니다. 차이가 있습니다. 필요하신 분들은 참고하시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.