Java String 문자열 상수 풀 분석
String str1 = “hello”;
String str2 = “hello”;
System.out.printl("str1 == str2" : str1 == str2 ) //true
문자열 상수 탱크 가 어디 에 있 습 니까?문자열 상수 탱크 의 위 치 를 분석 할 때 먼저 더미,스 택,방법 구역 을 알 아 보 세 요.
쌓다
코드:스 택 방법 영역 저장 문자열
String str1 = “abc”;
String str2 = “abc”;
String str3 = “abc”;
String str4 = new String(“abc”);
String str5 = new String(“abc”);
문자열 개체 생 성
면접 문제:String str4=new String("abc")은 몇 개의 대상 을 만 듭 니까?
따라서 상수 탱크 에'abc'글자 가 없 으 면 두 개의 대상 을 만 듭 니 다.그렇지 않 으 면 대상 을 만 들 고 인용 을 만 듭 니 다.
글자 의 양 에 따라 이런 변 식 문 제 를 제기 하 는 경우 가 많다.
String str1 = new String("A"+"B") ; 대상 을 몇 개 만 들 까요?
String str2 = new String("ABC") + "ABC" ; 대상 을 몇 개 만 들 까요?
str1:
문자열 상수 탱크:"A","B","AB":3 개
더미:new String("AB"):1 개
인용:str 1:1 개
총 5 개
str2 :
문자열 상수 탱크:"ABC":1 개
더미:new String("ABC"):1 개
인용:str 2:1 개
총 3 개
코드:기본 형식의 변수 와 상수,변수 와 인용 은 스 택 에 저장 되 고 상수 풀 에 저 장 됩 니 다.
int a1 = 1;
int a2 = 1;
int a3 = 1;
public static int INT1 =1 ;
public static int INT2 =1 ;
public static int INT3 =1 ;
문자열 상수 탱크 를 조작 하 는 방식
JVM 실례 화 문자열 상수 탱크 시
String str1 = “hello”;
String str2 = “hello”;
System.out.printl("str1 == str2" : str1 == str2 ) //true
String.intern()new 연산 자 를 통 해 만 든 문자열 대상 은 문자열 풀 의 모든 대상 을 가리 키 지 않 지만 문자열 의 intern()방법 으로 그 중 하 나 를 가리 킬 수 있 습 니 다.java.lang.string.intern()은 전체 문자열 풀 에 입구 가 있 는 보존 풀 문자열 을 되 돌려 줍 니 다.전역 문자열 풀 에 없 었 다 면 추가 되 었 을 것 입 니 다.
// Create three strings in three different ways.
String s1 = "Hello";
String s2 = new StringBuffer("He").append("llo").toString();
String s3 = s2.intern();
// Determine which strings are equivalent using the ==
// operator
System.out.println("s1 == s2? " + (s1 == s2)); // false
System.out.println("s1 == s3? " + (s1 == s3)); // true
보충:글자 양 과 상수 탱크 초기 분석문자열 대상 내 부 는 문자 배열 로 저장 되 어 있 습 니 다.다음 예 를 보십시오.
String m = "hello,world";
String n = "hello,world";
String u = new String(m);
String v = new String("hello,world");
그림 으로 표시 하면 상황 은 대략 이렇다.
테스트 데모:
String m = "hello,world";
String n = "hello,world";
String u = new String(m);
String v = new String("hello,world");
System.out.println(m == n); //true
System.out.println(m == u); //false
System.out.println(m == v); //false
System.out.println(u == v); //false
결론:이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.