Java에서 Integer와 int의 차이점은 무엇입니까?


249

예를 들어 왜 할 수 있습니까?

int n = 9;

하지만:

Integer n = 9;

그리고 당신은 할 수 있습니다 :

Integer.parseInt("1");

하지만:

int.parseInt("1");

35
정수는 클래스, int는 기본 유형
Anycorn

24
당신은 할 수Integer n = 9;(당신은 자바의 아주 오래된 버전을 사용하지 않는 경우)으로 인해 오토 박싱에
Alderath

답변:


321

int기본 유형입니다. 유형의 변수는 int나타내려는 정수의 실제 이진 값을 저장합니다. 클래스 가 아니기int.parseInt("1") 때문에 의미 int없으므로 메서드가 없습니다.

IntegerJava 언어의 클래스와 다르지 않습니다. 유형의 변수는 다른 참조 (객체) 유형과 마찬가지로 객체에 대한 참조Integer저장 합니다. 는 클래스 에서 정적 메소드에 대한 호출 입니다 (이 메소드는 실제로는 아닌를 반환 합니다 ).IntegerInteger.parseInt("1")parseIntIntegerintInteger

좀 더 구체적으로 말하면 Integer유형이 단일 인 클래스입니다 int. 이 클래스는 int일반 유형이나 널 입력이 필요한 상황과 같이 다른 오브젝트와 같이 취급 해야하는 경우 에 사용됩니다 .

Java의 모든 기본 유형에는 동등한 랩퍼 클래스가 있습니다.

  • byte 있다 Byte
  • short 있다 Short
  • int 있다 Integer
  • long 있다 Long
  • boolean 있다 Boolean
  • char 있다 Character
  • float 있다 Float
  • double 있다 Double

래퍼 클래스는 Object 클래스에서 상속되며 기본 클래스는 상속하지 않습니다. 따라서 Object 참조 또는 Generics가있는 컬렉션에서 사용할 수 있습니다.

자바 5부터 우리는 오토 박스를 가지고 있으며, 원시 클래스와 래퍼 클래스 사이의 변환은 자동으로 수행됩니다. 그러나 미묘한 버그와 성능 문제가 발생할 수 있으므로주의하십시오. 전환에 대해 명백한 것은 결코 아프지 않습니다.


6
에서 C#모든 데이터 유형은 "별명"을 가지고 int.Parse()(안 정말 않더라도) 메이크업 감각을한다
바히드 아미리

22
@ VSG24 ...하지만 이것은 Java 질문이며 이것은 Java 답변입니다. C#여기서는 전혀 관련이 없습니다.
Darkhogg

3
좋은 예는 다음과 같습니다. 컴파일 오류 : List <int> 유효한 : List <Integer>
hagai

추가 지식은 항상 이익
SUMIT 샤르마

1
나는 지식이 현재 주제와 관련이있을 때 새로운 것을 배우는 것을 좋아합니다. 감사합니다 Vahid.
Paul Oliver

30

정수는 클래스이고 int는 기본 유형입니다.

다음 링크에서 읽으십시오.


1
나는 이것이 두 가지 이유에 대한 완벽한 해답이라고 생각한다. 1- 간결하고 정확한 청중 / 구심을 염두에 두어야한다. 2- 답변의 텍스트에 모든 것을 넣는 것이 아니라 추가적인 세부 사항에 대한 방향을 제시한다. 질문은 정확하고 간결하게 답변 될 수 있지만 (일부는 정확하고 완전하기 위해서는 더 많은 세부 사항과 뉘앙스가 필요합니다), 모든 답변이 간단하고 직접적이어야한다고 생각합니다.
DRich

11
허, 나는 그것이 실제로 반대라고 생각합니다. "int is a primitive type"은 프리미티브 유형이 무엇인지 모른다면 아무 것도 말하지 않습니다. (그렇다면 int와 Integer의 차이점을 이미 알고있을 것입니다). 그리고 "링크 1"과 "링크 2"라고 표시된 두 개의 링크로 독자를 보내는 것은 특히 관련 섹션을 인용하는 것과 비교할 때 도움이되지 않습니다.
Steve Bennett

7

Integer는 기본 유형 int의 래퍼입니다. Integer 클래스의 모든 기능을 사용하여 인생을 조금 더 쉽게 만들 수 있습니다.

Java를 처음 사용하는 경우 Java 설명서를 숙지해야합니다. 예를 들어, 정수 클래스 에 대해 알고 싶은 내용이 자세히 설명되어 있습니다.

이것은 Integer 클래스에 대한 문서에서 나온 것입니다.

Integer 클래스는 기본 유형 int의 값을 객체에 래핑합니다. Integer 유형의 오브젝트에는 유형이 int 인 단일 필드가 포함됩니다.


7
이것은 다소 요점을 놓친다. 예를 들어 Integer클래스와 마찬가지로 컨테이너는 기본 유형과 달리 컨테이너에 저장할 수 있습니다.
Oliver Charlesworth

6

int 변수는 32 비트 부호있는 정수 값을 보유합니다. Integer (자본 I)는 (클래스) 유형 Integer의 오브젝트에 대한 참조 또는 널을 보유합니다.

자바는 자동적으로 둘 사이에 캐스트를한다; Integer 객체가 int 연산자에 대한 인수로 발생하거나 int 변수에 할당되거나 int 값이 Integer 변수에 할당 될 때마다 Integer에서 int로 이 캐스팅을 박싱 / 언 박싱이라고합니다.

null을 참조하는 Integer 변수가 명시 적으로 또는 암시 적으로 언 박싱 된 경우 NullPointerException이 발생합니다.

위의 텍스트에서 "변수"라는 용어는 지역 변수, 필드 또는 매개 변수를 의미합니다.


5

Integer Java에서 랩퍼 유형을 참조하는 반면 int기본 유형은 . Java에서 기본 데이터 유형을 제외한 모든 것은 Java를 의미하는 객체가 고품질의 순수한 객체 지향 프로그래밍 언어 인 것처럼 구현됩니다. 필요한 경우 모든 프리미티브 유형을 Java에서 랩퍼 유형으로도 사용할 수 있습니다. 기본 유형에서 일부 성능 이점을 얻을 수 있으므로 래퍼 유형은 필요할 때만 사용해야합니다.

아래 예와 같이.

Integer n = 9;

상수가 9되고있는 자동 박스 ( auto-boxingunboxing에서 자동으로 발생 java 5이후)에 Integer따라서 당신은 또한 그와 같은 문을 사용할 수 있습니다 Integer n = new Integer(9). 이것은 실제로 진술을 통해 달성됩니다.Integer.valueOf(9).intValue();


3

int는 객체가 아닌 기본 유형입니다. 이는 연관된 메소드가 없음을 의미합니다. 정수는 메소드가있는 객체입니다 (예 : parseInt).

최신 자바에는 자동 권투 및 언 박싱 기능이 있습니다. 즉, 컴파일러는 필요한 곳에 Integer.valueOf (int) 또는 integer.intValue ()를 삽입합니다. 그것은 실제로 쓸 수 있음을 의미합니다

Integer n = 9;

이것은 다음과 같이 해석됩니다

Integer n = Integer.valueOf(9);

3

정수는 랩퍼 클래스 / 오브젝트이고 int는 기본 유형입니다. 이 차이는 컬렉션에 int 값을 저장하려고 할 때 큰 역할을합니다. jdk1.4까지 객체 만 값으로 허용하기 때문입니다. 오토 박싱 때문에 JDK5는 완전히 다른 이야기입니다.


5
JDK5 +는 객체 만 허용합니다. 단지 오토 박싱을 사용하면 컴파일러가 자동으로 Integer.valueOf(i)또는 자동으로 호출 할 수 Integer.intValue()있습니다. Collection<int>여전히 작동하지 않습니다. 따라서 전혀 다른 이야기가 아닙니다. 짧은 이야기와 같은 이야기입니다.
yshavit

동의했다. 죄송합니다. 내 말이 그 내용을 반영하지 못할 수도 있습니다.
kosa

3

Java에서 int는 기본 데이터 유형이고 Integer는 도우미 클래스이며 한 데이터 유형을 다른 데이터 유형으로 변환하는 데 사용됩니다.

예를 들면 다음과 같습니다.

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

기본 데이터 유형은 Helper 클래스가 복잡하고 힙 메모리에 저장되는 사용 가능한 가장 빠른 메모리를 저장합니다.

"David Gassner"Java Essential Training에서 참조하십시오.


2

int정수를 나타내는 기본 유형입니다. 반면 Integer에 감싸는 객체입니다 int. 그만큼Integer 개체는 16 진수, 문자열 등으로 변환하는 등의 더 많은 기능을 제공합니다.

와 함께 OOP 개념을 사용할 수도 있습니다 Integer. 예를 들어 제네릭 (예 :)에 Integer를 사용할 수 있습니다 .Collection<Integer>


2

이것은 Java : The Complete Reference, Ninth Edition 에서 발췌 한 것입니다 .

Java는 int 또는 double 과 같은 기본 유형 (단순 유형이라고도 함) 을 사용하여 언어에서 지원하는 기본 데이터 유형을 보유합니다. 성능 향상을 위해 객체가 아닌 기본 유형 이 이러한 수량에 사용 됩니다 . 이러한 값에 개체를 사용 하면 가장 간단한 계산조차도 용인 할 수없는 오버 헤드 가 발생합니다. 따라서, 기본 유형은 객체 계층 구조의 일부가 아닌 , 그리고 그들이 상속 개체하지 .

기본 유형이 제공하는 성능 이점에도 불구하고 객체 표현이 필요할 때가 있습니다. 예를 들어, 메소드를 참조하여 기본 유형을 전달할 수 없습니다 . 또한 Java로 구현 된 많은 표준 데이터 구조는 객체에서 작동 하므로 이러한 (객체 별) 데이터 구조를 사용하여 기본 유형을 저장할 수 없습니다 . 이러한 상황 및 기타 상황을 처리하기 위해 Java는 유형 래퍼를 제공합니다.이 래퍼는 객체 내에 기본 유형을 캡슐화하는 클래스입니다.

랩퍼 클래스는 Java의 오토 박싱 기능 과 직접 관련됩니다 . 타입 래퍼는 Double, Float, Long, Integer, Short, Byte, Character 및 Boolean 입니다. 이 클래스는 기본 유형을 Java의 객체 계층으로 완전히 통합 할 수있는 다양한 메소드를 제공합니다.


1

Java 코드 런타임을 최적화하기 위해 , 등을 포함한 int 기본 유형 이 추가 되었지만 래퍼 클래스 와 함께 제공 되므로 필요한 경우 멤버로 제공되는 많은 유틸리티와 함께 ​​표준 Java 객체로 변환하고 사용할 수 있습니다. 기능 (예 :) .floatboolInteger.parseInt("1")


1

int기본 데이터 유형 인 반면 IntegerJava의 참조 또는 랩퍼 유형 (클래스)입니다.

그 후 오토 박싱박싱java 1.5 의 개념을 소개하면 둘 다 또는 이와 같이 초기화 할 수 있습니다 .intInteger

int a= 9
Integer a = 9 // both valid After Java 1.5.

Integer.parseInt("1");하지만 int.parseInt("1");??

Integerjdk라이브러리에 정의 된 클래스 parseInt()이며 정적 메소드입니다.Integer 클래스

따라서 Integer.parseInt("1");Java에서 가능합니다. 그러나 intjava에서는 기본 유형 (키워드처럼 가정)입니다. 따라서 전화 parseInt()를 걸 수 없습니다 int.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.