int와 Integer 차이
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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.