티스토리 뷰

int 는 primitive type

Integers 는 wrapper type 

라고 하는데

그럼 primitive data type은 무엇일까요.


Primitive data type

보통 Primitive data type이라고 하면

int, float, double, char, boolean ,..... 을 떠올리는데

이것들은 변수의 값이 저장될 공간의 크기(사이즈)와 타입을 지정해준다고 합니다.

이 저장될 공간의 크기는

int는 4 bytes로

-2,147,483,648 ~ 2,147,483,647 까지의 숫자를 저장 할 수 있는데

 

(4bytes는 32 bits의 저장공간이기때문에

2^32(4,294,967,296)의 저장 공간이 있고,

이걸 나누기 2 하면 2,147,483,648가 된다.

음수는 - 2,147,483,648 전부 가능하지만 

양수는 2,147,483,648-1 인 이유는

+/-를 구분짓는 sign bit 때문인데..

후략)

 

이러한 사이즈를 의미합니다.

primitive data type은 별도로 제공하는 메소드는 없는데

wrapper class 는 별도의 메소드를 제공합니다.

 

e.g. Integer.parseInt(), Integer.toHexString(),...


Wrapper Class

 

Wrapper Class는 타입을 포함한/가지고 있는 클래스 라고 합니다.

Integer는 int의 래퍼클래스 인거죠.

wrapper class는 객체로서 비교나 저장이 필요할때

이용합니다.

 

Wrapper class는 null 값이 처리가 가능하지만

산술연산을 하기 위해선 unboxing(wrapper class -> primitive 변환)이 필요하다고 하는데....

하지만!

JDK1.5 이후로 Autoboxing-자동 변환이 가능해져

실제로 아래 코드로 테스트를 해본 결과

이렇게 나왔습니다.

 

public static void main(String[] args) {
    Integer integerA = new Integer("1");
    Integer integerB= new Integer("1");

    int intA = 1;
    int intB = 1;

    System.out.println("integerA.equals(integerB): " + integerA.equals(integerB)); //true
    System.out.println("integerA == integerB: " + (integerA == integerB)); //false
    System.out.println(intA == intB); //true
    System.out.println("integerA + integerB = " + (integerA + integerB)); // 2
    System.out.println("integerA + intA = " + (integerA + intA)); // 2

}

 

.equals() 는 내용(content)을 비교하기때문에

integerA.equals(integerB)는 true를 반환하지만

== 연산자는 주소값을 비교합니다.

integerA 와 integerB 는 같은 내용물을 갖고 있지만

다른 객체이기 때문에 주소값이 달라

integerA==integerB 는 

false를 반환합니다.

 

intA 와 intB 는 객체가 아닌

값을 지정한 것이기 때문에 

intA== intB는 true를 반환합니다.

 

직접 boxing/unboxing을 할 필요없이

자동으로 변환이 되는듯 했습니다.

하지만 오토박싱을 사용하면

성능이 저하된다고 합니다. 


정리

Primitive Type Wrapper Class
int, double, boolean, char ...  Integer, Double, Boolean, Character ...
변수가 저장될 공간의 크기와 타입을 지정 primitive type 을 포함/가지고 있는 Class
-> primitive type을 객체로 비교/이용할때 사용한다
제공되는 메소드가 없다 제공되는 메소드가 있다.

 

Boxing: primitive type을 wrapper class 로 변환하는것

Unboxing: wrapper class 를 primitive type으로 변환 하는것

auto-boxing/ auto-unboxing: JDK1.5 이후 박싱/언박싱 형변환들이 컴파일러에 의해 자동으로 실행되는것

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함