>  기사  >  Java  >  자바 정수와 정수의 차이점은 무엇입니까?

자바 정수와 정수의 차이점은 무엇입니까?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-12-27 11:42:582753검색

자바 정수와 정수의 차이점은 무엇입니까?

Basic:

1은 Java의 한 유형입니다. 기본 데이터 유형이며 정수는 int의 래퍼 클래스입니다.

2. 정수 변수는 사용하기 전에 인스턴스화되어야 하지만 int 변수는 그렇지 않습니다.

3. 정수는 실제로 객체에 대한 참조입니다. 정수 객체가 새로 생성되면 실제로 객체를 가리키는 포인터가 생성되고 int는 데이터 값을 직접 저장합니다.

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

Extension:

1 정수 변수는 실제로 정수 개체에 대한 참조이므로 new를 전달하는 두 정수 변수는 결코 동일하지 않습니다. (new는 메모리 주소가 다른 두 개의 객체를 생성하기 때문입니다)

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j);//false

2 정수 변수를 int 변수와 비교할 때 두 변수의 값이 동일한 한 결과는 true입니다. 왜냐하면 정수는 본질적으로 int의 래퍼 클래스이기 때문입니다. 두 숫자를 비교할 때 java는 자동으로 정수를 압축 해제하므로 이는 본질적으로 두 int 변수를 비교하는 것입니다.

Integer i = new Integer(100);
int j = 100;
System.out.print(i == j);//true

3. new로 생성된 Integer 변수와 new로 생성되지 않은 Integer 변수를 비교하면 결과는 false입니다. new 없이 생성된 변수는 Java 상수 풀에 존재하고, new로 생성된 변수는 힙에서 새로 생성된 객체를 가리키기 때문에 둘의 메모리 주소가 다릅니다.

Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j);//false

4. 새 정수가 아닌 두 변수를 비교할 때 두 변수의 값이 -128에서 127 사이이면 결과는 true이고, 그렇지 않으면 false입니다.

이 이상한 결과에 대해 java의 설명은 다음과 같습니다.

Integer i = new Integer(100);//在编译时会变成Integer i = Integer.ValueOf(100)

그리고 Java API의 Integer.valueOf() 정의는 다음과 같습니다.

public static Integer valueOf(int i){
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high){
        return IntegerCache.cache[i + (-IntegerCache.low)];
    }
    return new Integer(i);
}
# 🎜🎜#즉, -128~127 사이의 숫자에 대해 java는 이를 캐시하고, 다음에 정수 변수에 값을 할당할 때 -128~127 사이이고 캐시된 경우 호출됩니다. 캐시에서 직접.

PHP 중국어 웹사이트에는 무료

JAVA 입문 튜토리얼이 많이 있습니다. 누구나 배울 수 있습니다!

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.