ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 원시타입과 래퍼클래스
    책/Head First Java 2023. 12. 20. 01:03

     

     

    Integer vs int 이 둘은 무슨차이?

     

    자바 1.5에서 auto-boxing과 auto-unboxing을 제공하여, 타입 측면에서는 차이가 없이 사용할 수 있다.

    (컴파일 타임에 확인 가능)

     

    int

    • int는 Primitives 타입으로 4바이트만 차지한다.
    • 메모리와 연산 속도에 이점이 있다.
    • Integer 타입에 할당되는 경우, 컴파일 타임에 자동으로 Integer.valueOf()를 통해 auto-boxing 된다.

     

    Integer

    • Integer는 Reference 타입이기 때문에 보다 많은 메모리를 차지한다. (기본 int 값 + 각종 메소드)
    • 힙에 할당된다.
    • null 사용 가능하다.
    • int 타입에 할당되는 경우, 컴파일 타임에 자동으로 Integer.initValue()를 통해 auto-unboxing 된다.

     


     

    코드와 바이트코드

     

    public class Runner {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Runner r = new Runner();
    		
    		int num = 1;
    		Integer numObj = Integer.valueOf(1);
    		System.out.println(numObj.intValue());
    		
    		r.getInt(num);
    		r.getInt(numObj);
    		
    		r.getInteger(num);
    		r.getInteger(numObj);
    		
    	}
    	
    	void getInt(int num) {
    		System.out.println("hello" + num);
    	}
    	
    	void getInteger(Integer num) {
    		System.out.println("hi" + num);
    	}
    
    }

     

     

    22, 25와 30,33에서 확인이 가능하다.

    public class Runner {
      public Runner();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: return
    
      public static void main(java.lang.String[]);
        Code:
           0: new           #2                  // class Runner
           3: dup
           4: invokespecial #3                  // Method "<init>":()V
           7: astore_1
           8: iconst_1
           9: istore_2
          10: iconst_1
          11: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
          14: astore_3
          15: aload_1
          16: iload_2
          17: invokevirtual #5                  // Method getInt:(I)V
          20: aload_1
          21: aload_3
          22: invokevirtual #6                  // Method java/lang/Integer.intValue:()I
          25: invokevirtual #5                  // Method getInt:(I)V
          28: aload_1
          29: iload_2
          30: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
          33: invokevirtual #7                  // Method getInteger:(Ljava/lang/Integer;)V
          36: aload_1
          37: aload_3
          38: invokevirtual #7                  // Method getInteger:(Ljava/lang/Integer;)V
          41: return
    
      void getInt(int);
        Code:
           0: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
           3: iload_1
           4: invokedynamic #9,  0              // InvokeDynamic #0:makeConcatWithConstants:(I)Ljava/lang/String;
           9: invokevirtual #10                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
          12: return
    
      void getInteger(java.lang.Integer);
        Code:
           0: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
           3: aload_1
           4: invokedynamic #11,  0             // InvokeDynamic #1:makeConcatWithConstants:(Ljava/lang/Integer;)Ljava/lang/String;
           9: invokevirtual #10                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
          12: return
    }

     

     

     

     

     

     


    [이미지 출처]

    https://www.amazon.com/Head-First-Java-Brain-Friendly-Guide/dp/1491910771 (글 표지 이미지)

     

    ' > Head First Java' 카테고리의 다른 글

    List 정렬에 대하여  (1) 2023.12.21
    HashSet! 무엇을 기준으로 같다고 할 것인가?  (0) 2023.12.20
Designed by Tistory.