2012-06-24 1 views
3

당신은 정수가 있다면? 전체 구문은 다음과 같습니다.어떻게 원시는 자바에서 "새 객체"인스턴스를 건너 뛸 수 있습니까?</p> <pre><code>int i = 9; </code></pre> <p>이 어떻게 그렇게 할 수 있습니다 : 예를 들어

int i = new Integer(9); 

전체 Integer() 부분을 어떻게 건너 뛰고 계속 작동합니까?

감사합니다.

+0

당신은 원시 타입과 객체를 혼합하고 있습니다. – user278064

+1

프리미티브는 정의가 아니라 객체입니다. 프리미티브에 대한 참조를 가질 수 없으며 힙에 단독으로 존재할 수 없습니다. –

+1

해당 줄은 동일하지 않습니다. 특히, 두 번째 줄에는 여분의 무료 개체가 포함됩니다. –

답변

7

new Integer()은 원시가 아닙니다. 박스형 프리미티브입니다.
실제 프리미티브 (int 등)는 객체가 아니므로 인스턴스화 할 수 없습니다.

Integer x = 9으로 쓸 수도 있습니다. Java 컴파일러는 암시 적으로 new Integer()을 삽입합니다.
이것을 자동 권투라고합니다.

+0

박스형 프리미티브 란 무엇입니까? – Eugene

+1

@Eugene (auto-) boxing은 래퍼 객체 (int -> Integer, double -> Double 등)와 함께 프리미티브를 래핑하는 것을 의미합니다. – Puce

9

프리미티브가 객체가 아니기 때문에 건너 뛰지 않습니다.

코드의 두 번째 줄에는 auto-unboxing이 포함되어 있으며 나중에 Java 언어에 추가되었습니다.

3

은 아마 당신은 원시 타입과 동등한 개체 유형 사이의 커버 변환 에서 자동화 AutoBoxing

Primitive : Reference Mapping 
byte : Byte 
short : Short 
int : Integer 
long : Long 
float : Float 
double : Double 
bool : Boolean 
char : Character 

오토 박싱/언 박싱로 봐 가지고 싶어. 예제의 경우 int 프리미티브와 Integer 객체 사이 또는 부울 프리미티브와 Boolean 객체 사이의 변환. 이것은 Java 5에서 처음으로 도입 된 입니다.

2

프리 머 티브와 오브젝트는 두 가지입니다. 프리미티브가 없다면 new Integer(9)과 같은 Integer 객체를 생성 할 수 없다 (Integer는 생성자 내부에서 프리미티브 9을 사용한다). 이 요구한다면,

2

귀하의 질문은 왜 new 다음 대답은 "때문에 자바 5에 도입 된 프리미티브의 자동 복싱에"것없이

Integer i = 9; 

작품 더 많은 감각을 만들었을 것입니다. 그래서 어쩌면 그게 당신이 정말로 물어보고 싶은 것입니다 :)

관련 문제