int와 Integer 차이

6488 단어

int와 Integer 차이


먼저 다음과 같은 사항을 요약합니다.
1. int는 기본 데이터 형식으로 직접 수치를 저장한다.Integer는 클래스이며 객체가 생성될 때 참조로 해당 객체를 가리킵니다.
2. Integer 기본값은 null이고 int 기본값은 0입니다.
3. Integer로 선언된 변수는 인스턴스화되어야 하고 int로 선언된 변수는 인스턴스화되지 않아야 합니다.
4. Integer는 대상이고 인용으로 이 대상을 가리키며 int는 기본 형식으로 수치를 직접 저장한다.
5. Integer 객체는 메모리를 더 많이 사용합니다.Integer는 객체의 메타데이터를 저장해야 하는 객체입니다.그러나 int는 원시 형식의 데이터이기 때문에 차지하는 공간이 더욱 적다.
6. 저장 위치도 다르다.int는 메모리에 창고에 저장됩니다.인용 형식의 대상 인용 (값의 주소) 은 창고에 저장되고 실제 대상 (값) 은 더미에 저장됩니다.
7. int(기본 데이터 유형)의 장점은 속도가 빠르다는 것이다. (대상의 구조와 회수와 관련이 없다) 봉인류의 목적은 주로 데이터 간의 교체를 잘 처리하는 것이다.
그리고 구체적인 차이점은 다음과 같다.
(주: 인용 유형 변수에 대해 ==조작부호를 비교하는 것은 두 인용이 같은 대상을 가리키는지 여부이고, 기본 유형 변수에 대해 ==조작부호를 비교하는 것은 두 변수의 값이 같은지 여부이다.)

1. new를 통해 나온 Integer 변수 두 개를 비교한 결과 false가 나왔다.

/**
 *     new   Integer
 */
public class Test {
    public static void main(String[] args) {
        Integer i = new Integer(200);
        Integer j = new Integer(200);
        System.out.print(i == j);
        //  :false
    }
}

Integer 변수는 실제로 Integer 객체에 대한 참조입니다.new에 Integer가 있을 때 실제로는 이 대상을 가리키는 바늘을 생성합니다. 두 번의 new Integer는 두 개의 대상을 생성하는데 메모리 주소가 다르기 때문에 두 개의 new에서 나오는 Integer 변수가 같지 않습니다.

2. new 생성되지 않은 Integer 변수와 new Integer() 생성된 변수를 비교한 결과 false가 됩니다.

/**
 *    new   Integer   new   Integer  
 */
public class Test {
    public static void main(String[] args) {
        Integer i= new Integer(200);
        Integer j = 200;
        System.out.print(i == j);
        //  :false
    }
}

new가 생성되지 않은 Integer 변수는 자바 상수지의 대상을 가리키고, new Integer () 가 생성한 변수는 더미에서 새로 만든 대상을 가리키며, 메모리의 주소가 다르기 때문이다.그래서 false로 출력합니다.

3. new가 생성되지 않은 두 Integer 대상을 비교한 결과 두 변수의 값이 구간 [-128127] 사이에 있으면 비교 결과는true이다.그렇지 않으면 false가 됩니다.

/**
 *      new   Integer  
 */
public class Test {
    public static void main(String[] args) {
        Integer i1 = 127;
        Integer ji = 127;
        System.out.println(i1 == ji);//  :true
        Integer i2 = 128;
        Integer j2 = 128;
        System.out.println(i2 == j2);//  :false
    }
}

java는 Integer i1 = 127을 컴파일할 때 Integer i1 = Integer로 번역됩니다.valueOf(127).Interger 소스를 보려면 다음과 같이 하십시오.
 * This method will always cache values in the range -128 to 127,
     * inclusive, and may cache other values outside of this range.
     */
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

이를 통해 알 수 있듯이 자바는 [-128127] 사이의 수를 캐시한다.Integer i1 = 127에서는 127 캐시를, Integer j2 = 127에서는 캐시에서 직접 가져와 new가 되지 않으므로 true가 됩니다.
Integer i2 = 128 에서는 128 캐시를 사용할 수 없고 Integer j2 = 128 에서는 return new Integer (128) 를 사용할 수 있습니다.그래서 결과는false입니다.

4. Integer 변수(new에서 생성되었든 아니든)와 int 변수를 비교하면 두 변수의 값이 같으면 결과는true이다.

/**
 *   Integer   int  
 */
public class Test {
    public static void main(String[] args) {
        Integer i1 = 200;
        Integer i2 = new Integer(200);
        int j = 200;
        System.out.println(i1 == j);//  :true
        System.out.println(i2 == j);//  :true
    }
}

포장류 Integer 변수는 기본 데이터 형식인 int 변수와 비교할 때 Integer는 자동으로 인트로 포장을 뜯어 비교한다. 실제로는 두 개의 int 변수를 비교하는데 값이 같기 때문에true이다.
마지막으로 한 가지 개념을 소개한다.
JDK5.0부터 자동으로 패키지를 봉인할 수 있으며 기본 데이터 형식은 자동으로 봉인 클래스로 봉인할 수 있습니다.예를 들어 리스트를 모으고, 대상에 Object를 추가하려면, 숫자를 봉인 형식의 대상으로 봉하여 리스트에 저장해야 한다.
List list = new ArrayList();
list.add(new Integer(1));
JDK에서 5.0 이후에는 자동으로 패키지를 봉인할 수 있습니다.
List list = new ArrayList();
list.add(1);

좋은 웹페이지 즐겨찾기