Java Boolean 래퍼 클래스는 어떻게 인스턴스화됩니까?
-
28-10-2019 - |
문제
자바에서는 다음과 같은 코드를 작성할 수 있습니다. 라코 디스
그리고 작동합니다.이제 "true"값을 가진 객체가 있습니다.
어떻게 작동합니까?생성자를 통해 값을 전달할 필요가없는 이유는 무엇입니까?다음과 같이 : 라코 디스
또한 비슷한 방식으로 인스턴스화 할 수있는 사용자 정의 클래스를 만들 수 있습니까?그렇다면 그 이름은 무엇입니까?
그러면 다음과 같이 할 수 있습니다. 라코 디스
그러므로 나만의 래퍼 클래스가 있습니다.
감사합니다
해결책
아니요 후자는 할 수 없습니다.
전자는 오토 박스 라고합니다. 자동 랩핑을 위해 Java v1.5에 도입되었으며 래퍼 대응 요소의 기본 요소입니다.
제네릭 및 / 또는 컬렉션을 사용할 때 오토 박싱의 이점을 명확하게 확인할 수 있습니다.
기사 출처 : J2SE 5.0 요약
"기본 유형의 Autoboxing 및 Auto-Unboxing" 샘플에는 다음이 있습니다.
이전 (오토 박스 추가) 라코 디스
이후 라코 디스
보시다시피 코드가 더 명확합니다.
문서의 마지막 참고 사항에 유의하십시오. <인용구>
그러면 언제 오토 박싱과 언 박싱을 사용해야할까요? 참조 유형과 프리미티브간에 "임피던스 불일치"가있는 경우에만 사용하십시오 (예 : 콜렉션에 숫자 값을 입력해야하는 경우). 과학 컴퓨팅 또는 기타 성능에 민감한 숫자 코드에 오토 박싱 및 언 박싱을 사용하는 것은 적절하지 않습니다. Integer는 int를 대체하지 않습니다. 오토 박싱과 언 박싱은 기본 유형과 참조 유형의 구분을 모호하게하지만이를 제거하지는 않습니다.
다른 팁
어떻게 작동하나요?
컴파일러 기능입니다.컴파일러는 자동으로 boxing-operation을 생성합니다.실제로 할 일은 생성하는 것입니다 라코 디스
이렇게하면 기존 (변경 불가능한) 인스턴스 Boolean.TRUE 및 Boolean.FALSE가 새 인스턴스를 만드는 대신 사용되기 때문입니다.
String 객체를 다음과 같이 만들 수있는 것과 같은 방법입니다. 라코 디스
정말 Java의 특전입니다.프리미티브 데이터 유형에 이미 사전 정의 된 래퍼가 있다는 점을 고려할 때 자신 만의 래퍼 클래스를 만드는 이유도 모르겠습니다 ...
이 기능은 Java 1.5에 추가되었으며 라고합니다.오토 박싱 .이러한 종류의 마법은 원시 값과 해당 래퍼에만 사용할 수 있습니다.
자바에서는 스스로 할 수 없습니다.그래도 원하는 경우 Scala 로 이동하는 것보다 좋습니다. 좋습니다.즉, 암시 적 전환 이라는 기능을 사용할 수 있습니다.다음은 귀하의 사례에 대한 간단한 예입니다. 라코 디스
아니요, 단지 컴파일러 마법 일뿐입니다.이를 특수한 경우 ( 오토 박스 라고 함)로 취급합니다.예를 들어 http://download.oracle.com/javase/1.5.0 / docs / guide / language / autoboxing.html .
오토 박스 라고하며기본적으로 컴파일러가 당신을 위해하는 일입니다.그것은 당신이 new Boolean( true )
또는 (더 나은) Boolean.TRUE
를 사용해야하기 전에 Java 5에서만 추가되었습니다.
아니요, 자신의 클래스에 대해 가질 수 없으며 기본 래퍼 클래스에 대해서만 수행됩니다.