자바 문자열 + 조작 원리

2142 단어 자바cStringClass
public class C {
    String s1 = "a";
    String s2 = "a"+"b";
    public static void main(String args[]){
	
    }
}

컴 파일 할 때 + 연산 자 양쪽 이 상수 라면 컴 파일 후 연 결 된 값 을 상수 탱크 에 넣 는 것 입 니 다.  ab 상수 탱크 에 넣 으 면 상수 b 를 찾 을 수 없습니다. 
컴 파일 된 명령 은:
public C();   Code:    Stack=2, Locals=1, Args_size=1    0:   aload_0  //반환 값 this   1:   invokespecial   #11;//메 서 드 java/lang/Object. "< init >": () V//호출 this. < init >   4:   aload_0//이것 을 되 돌려 줍 니 다   5:   ldc     #13;//String a//상수 탱크 의 a    7:   putfield        #15;//Field s1:Ljava/lang/String;  //필드 s1 값 설정   10:  aload_0//이것 을 되 돌려 줍 니 다   11:  ldc     #17;//String ab//상수 의 ab 를 되 돌려 줍 니 다.   13:  putfield        #19;//Field s2:Ljava/lang/String;//설정 필드 s2   16:  return
위 는 맞아요. + 조작 수 는 모두 상수 입 니 다. 변수 라면 어 떻 습 니까?
변수 라면 new String Builder 가 나 와 append 를 한 다음 toString () 으로 돌아 갑 니 다.
public C();   Code:    Stack=4, Locals=1, Args_size=1    0:   aload_0    1:   invokespecial   #11;//Method java/lang/Object."":()V    4:   aload_0    5:   ldc     #13;//String a    7:   putfield        #15;//Field s1:Ljava/lang/String;    10:  aload_0//이상 필드 s1 할당 진행     11:  new     #17;//class java/lang/stringBuilder//stringBuilder 대상 만 들 기   14:  dup//스 택 항목 값 을 복사 하고 복사 값 을 스 택 꼭대기 에 누 릅 니 다.   15:  aload_0//현재 대상 획득   16:  getfield        #15;//Field s1:Ljava/lang/String;//필드 s1 가 져 오기   19:  invokestatic    #19;//Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;//String. valueOf 호출   22:  invokespecial   #25;//방법 java/lang/StringBuilder. "< init >": (Ljava/lang/String;) V//호출 StringBuilder 구조   25:  ldc     #28;//String b//상수 탱크 에서 b 꺼 내기     27:  invokevirtual   #30;//Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;//stringBuilder 의 append 방법 을 호출 합 니 다.   30:  invokevirtual   #34;//Method java/lang/StringBuilder.toString:()Ljava/lang/String;//stringBuilder 의 toString () 을 되 돌려 줍 니 다.   33:  putfield        #38;//Field s2:Ljava/lang/String;//설정 필드 s2   36:  return   LineNumberTable:

좋은 웹페이지 즐겨찾기