Java에서 primitve 유형 int를 ArrayList에 넣을 때 원시 유형 int가 객체 정수로 자동 변경되는 이유는 무엇입니까?int가 java에서 정수로 자동 변경되는 이유는 무엇입니까?
답변
Autoboxing
은 primitive
유형을 적절한 wrapper
개체로 자동 변환합니다. 그 이유는 컬렉션에 프리미티브를 넣을 수 없기 때문입니다. Java 5이 나오기 전에이 작업을 직접 수행해야했지만 이제는 자동으로 처리됩니다. 그것은 자바 auto-boxing
라고 http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
:
은 자세한 내용은 여기 링크를 참조하십시오.Java 프로그래머는 누구나 알고 있듯이 int (또는 다른 기본 값)를 콜렉션에 넣을 수 없습니다. 컬렉션은 객체 참조 만 가질 수 있으므로 기본 값을 적절한 래퍼 클래스에 저장해야합니다 (int의 경우 Integer 임). 컬렉션에서 객체를 가져올 때, 당신은 당신이 넣은 Integer를 얻는다; int가 필요한 경우 intValue 메소드를 사용하여 Integer를 unbox해야합니다. 이 복싱과 언 박싱은 모두 고통이며 코드를 혼란스럽게합니다. autoboxing 및 unboxing 기능은 프로세스를 자동화하여 통증과 혼란을 없애줍니다.
ArrayList를 할 수만 저장소 개체. int는 기본 데이터 유형이므로 해당 객체에 대해 "자동 박스"됩니다. 이것은 Java 5의 경우에만 발생합니다. 그 전에 Integer를 직접 박스에 넣어야했습니다.
컬렉션은 원시 객체가 아닌 객체 만 보유 할 수 있으므로 자동 보 고서가 발생합니다. int 프리미티브가 필요한 경우이를 읽을 때 intValue() 메서드를 사용하여 unbox해야합니다.
이것은 Java 1.5에서 도입 된 Java 언어 기능입니다. 그것은 오토 박싱입니다.
대략적으로 말하자면, 자바 원시 타입을 해당 래퍼 클래스 유형으로 변환합니다. 컴파일러는 inboxing (primitive-to-wrapper) 또는 outboxing (wrapper-to-primitive)이 필요할 때 (가능한 경우) 감지하고 표현식을 올바른 바이트 코드로 확장합니다.
그래서 뒤에서 을 추가하면 Integer
의 인스턴스가 목록에 추가됩니다.
더 잘 이해하려면 참조 유형 및 값 유형을 자세히 읽어보십시오.
ArrayList는 객체에 대한 참조 만 보유합니다. 가치 그 자체를 보유하지는 않습니다.
int는 값 유형이므로 참조가 없습니다. int를 Integer로 변환하면 메모리에 int 값을 보유하는 Integer 객체와 생성 한 Integer 객체에 대한 참조 공간을 만듭니다.
이제 ArrayList는 단순히 정수 자체를 유지하는 대신 Integer 객체에 주소를 저장합니다.
다음과 같이 생각하십시오. ArrayList의 한 요소가 메모리 블록 : 200을 차지합니다. 정수 개체가 메모리 블록에 있습니다 : 400. 메모리 블록 200에서 정수 값을 유지하는 대신 메모리 주소를 400으로 유지합니다.
이유, 잘 모르겠습니다. 나는 그들이 단순하게 유지하기 위해 이런 방식으로하기로 결정했다고 생각한다.
- 1. Java에서 Object의 해시 코드가 변경되는 이유는 무엇입니까?
- 2. 날짜 형식이 변경되는 이유는 무엇입니까?
- 3. Java에서 문자열을 정수로 변환
- 4. Java에서 지역 변수를 "자동"이라고도하는 이유는 무엇입니까?
- 5. AS3 : 데이터 유형이 TextField에서 DisplayObject로 자동 변경되는 이유는 무엇입니까?
- 6. 이 변수가 변경되는 이유는 무엇입니까?
- 7. int가 printf에서 double로 변환되지 않는 이유는 무엇입니까?
- 8. 부호없는 int가 CLS를 준수하지 않는 이유는 무엇입니까?
- 9. 이 인스턴스 개체가 변경되는 이유는 무엇입니까?
- 10. Java에서 4 자리 정수로 나눕니다.
- 11. 통화 형식이 장치에서 변경되는 이유는 무엇입니까?
- 12. "초기 크기"설정이 변경되는 이유는 무엇입니까?
- 13. ASP.NET MVC에서 SessionID가 계속 변경되는 이유는 무엇입니까?
- 14. while 루프에서 var가 변경되는 이유는 무엇입니까?
- 15. 리소스 파일에서 레이블 크기가 변경되는 이유는 무엇입니까?
- 16. parenscript 함수가 모두 소문자로 변경되는 이유는 무엇입니까?
- 17. 내 개체의 색상이 무작위로 변경되는 이유는 무엇입니까?
- 18. WCF 끝점 주소가 매번 변경되는 이유는 무엇입니까?
- 19. NSString 속성이 잘못된 값으로 변경되는 이유는 무엇입니까?
- 20. 페이지로드시 $ _SESSION [ 'token'] 값이 변경되는 이유는 무엇입니까?
- 21. 이 프로그램의 출력이 130시에 변경되는 이유는 무엇입니까?
- 22. If 문을 사용하여 변수가 변경되는 이유는 무엇입니까?
- 23. 가시성을 변경하는 동안 초점이 변경되는 이유는 무엇입니까?
- 24. 호버 배경이 흰색으로 변경되는 이유는 무엇입니까?
- 25. jsp에서 ModelMap 속성의 값이 변경되는 이유는 무엇입니까?
- 26. 데이터베이스 액세스 시간이 변경되는 이유는 무엇입니까?
- 27. Google의 OpenID 구현 ID가 변경되는 이유는 무엇입니까?
- 28. gzip 파일 크기가 매번 변경되는 이유는 무엇입니까?
- 29. 테두리를 추가하면 배경색의 동작이 변경되는 이유는 무엇입니까?
- 30. Int32를 Float64로 캐스팅하여 데이터가 변경되는 이유는 무엇입니까?
컬렉션에 개체가 프리미티브가 아닌 개체 만 보유 할 수 있으므로 자동 보급이 발생합니다. – pengibot
프리미티브를 사용하려면 TIntArrayList를 사용할 수 있습니다. –