>  기사  >  Java  >  Java에서 int와 정수의 차이점

Java에서 int와 정수의 차이점

王林
王林앞으로
2019-11-30 17:24:422762검색

Java에서 int와 정수의 차이점

1. Java 기본 데이터 유형 및 해당 캡슐화 클래스

Java에서 int와 정수의 차이점

Java 데이터 유형에는 기본 데이터 유형과 참조 데이터 유형이 포함되어 있습니다. 기본 데이터 유형에 해당하는 캡슐화 클래스가 도입되었습니다. 예를 들어 int 캡슐화 클래스는 Integer입니다.

온라인 교육 영상 공유: java 교육 영상

2. Java 자동 언박싱 및 자동 박싱

1. 자동 박싱

오토박싱은 실제로 기본 데이터 유형을 참조 데이터 유형(객체)으로 변환합니다.

2. 자동 언박싱

자동 언박싱은 실제로 참조 데이터 유형을 기본 데이터 유형으로 변환하는 것입니다.

코드는 다음과 같습니다.

    public static void main(String[] args) {
        Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1);

        int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1
        System.out.println(a);
        System.out.println(b);
    }

인쇄 결과:

1
0

3위에서. int와 Interger의 차이점을 볼 수 있습니다.

int는 기본 데이터 유형이고 Integer는 참조 데이터 유형입니다.

int 기본값은 0이고 Integer 기본값은 null입니다.

int 유형은 직접 숫자 값을 저장합니다. 정수는 객체를 인스턴스화하고 객체의 주소를 가리켜야 합니다.

이렇게 생각하시나요? 사실, 둘 사이에는 몇 가지 세부적인 차이점이 있습니다. 다음과 같습니다

    public static void main(String[] args) {
        Integer a = new Integer(1);
        Integer b = new Integer(1);

        int c = 1;
        int d = 1;

        Integer e = 1;
        Integer f = 1;
        
        Integer g = 130;
        Integer h = 130;
        
        Integer i = new Integer(130);
        int j = 130;
    }

1: a == b? 말도 안 돼요, 확실히 평등하지 않아요. 두 개의 새 개체의 주소가 다릅니다.

2: c == d? 이것도 말도 안되는 소리입니다. 기본 데이터 유형의 값은 동일해야 합니다.

3: 이제 핵심 질문은 e == f인가요? g == h?

답은 다음과 같습니다: e == f;

왜 이런 일이 발생하나요? ava가 컴파일될 때 Integer g = 130이 Integer.valueOf(130)로 컴파일되기 때문에 이는 클래스 파일을 디컴파일하여 확인할 수 있습니다. Integer 소스 코드에서 Integer.valueOf() 메서드는 -128~127 값 사이의 Integer를 캐시하고 새 값을 생성하지 않을 것이라는 결론을 내릴 수 있으므로 값 2가 다음과 같을 때 e==f; 127보다 크거나 작음 - 128에서는 새로운 것이 생성되므로 g != h.

Integer의 valueOf 메서드는 다음과 같습니다.

    public static Integer valueOf(int i) {
         //IntegerCache.low == -128  ;IntegerCache.high == 127
         //当数值大于-128小于127时,进行缓存;否则重新new一个。
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

4: c == e입니까, i == j입니까?

답은 모두 동일합니다. 캡슐화된 클래스를 기본 데이터 유형과 비교할 때 Java는 자동으로 해당 클래스를 unboxing한 다음 값이 동일한지 비교하기 때문입니다.

요약:

1. 모두 캡슐화된 클래스이고 모두 new에서 파생되므로 확실히 동일하지 않습니다. 객체의 메모리 주소가 다르기 때문입니다.

2. 값이 -128~127 사이이면 모두 캡슐화된 클래스이고, 그렇지 않으면 동일하지 않습니다.

3. 패키지 클래스와 기본 유형을 비교하면 값이 동일한 한 동일하고, 그렇지 않으면 동일하지 않습니다. 캡슐화된 클래스와 기본 데이터 유형을 비교할 때 자동 언박싱 작업이 발생하기 때문입니다.

4. 값이 동일하면 모두 기본 데이터 유형입니다. 그렇지 않으면 동일하지 않습니다.

더 많은 관련 튜토리얼을 보려면 다음을 방문하세요.

Java 시작하기

위 내용은 Java에서 int와 정수의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제