1. 래퍼 유형 목록

Java에는 클래스가 아닌 유형인 8개의 기본 유형이 있다는 것을 알고 있습니다. 한편으로 이것은 좋습니다. 간단하고 공간을 거의 차지하지 않습니다. 반면에 때때로 수업은 우리에게 꼭 필요한 것입니다. 다음 강의에서 그 이유를 정확히 알게 될 것입니다.

그래서 무엇을 할 수 있습니까?

Java의 다섯 번째 버전부터 각 기본 유형에 트윈 클래스가 추가되었습니다. 이러한 각 클래스는 특정 유형의 값이 있는 단일 필드를 저장합니다. 이러한 클래스는 기본 값을 클래스로 래핑하기 때문에 래퍼 유형 이라고 합니다 .

다음은 이러한 유형의 목록입니다. 알고 계십니까?

원시 유형 래퍼 클래스
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

기본 유형의 이름은 소문자로 시작하지만 래퍼 클래스의 이름은 대문자로 시작합니다. 일부 클래스 이름은 조금 더 깁니다: Integerinstead of intи Characterinstead of char.

래퍼 클래스의 모든 개체는 변경할 수 없습니다( immutable ).

클래스 의 단순화된 코드는 Integer다음과 같습니다.

암호 메모
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}


변수

생성자 이




메서드는 값을 반환합니다. 정적 메서드는 변수 에 대한




새 개체를 만듭니다.Integerint

2. an을 intan로 변환Integer

래퍼 유형은 기본 유형에 해당하는 것으로 간주됩니다. 기본 유형에 해당하는 래퍼 개체를 쉽게 만들 수 있습니다.

기본 유형이 해당 래퍼 유형과 상호 작용하는 방식을 분석하기 위해 int 유형을 예로 사용하겠습니다. intan에서 an으로 또는 그 반대로 변환하는 코드는 Integer다음과 같습니다.

intan을 로 변환하려면 Integer다음 코드를 작성해야 합니다.

Integer name = new Integer(value);

여기서 name는 변수의 이름 Integer이고 는 value래핑된 int값입니다.

예:

암호 메모
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

그리고 an을 Integeran로 변환하려면 int다음 코드를 작성해야 합니다.

int name = variable.intValue();

여기서 name는 변수의 이름 int이고 는 개체 variable에 대한 참조입니다 Integer.

예:

암호 메모
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

3. 오토박싱 및 언박싱

하지만 Integer타입을 이용한 간단한 연산조차도 작성하기 쉽지 않습니다.

이전에 말했듯이 Integer유형은 변경할 수 없습니다( immutable ). Integer새 값으로 개체를 만들려면 int명시적으로 새 개체를 만들어야 합니다 Integer. int즉, 객체 내부에 저장된 값을 가져오는 것은 쉽습니다 Integer. intValue()메소드를 호출하기만 하면 됩니다.

예:

암호 설명
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
5개체 감싸기 Integer개체 에서
값 가져오기 새 개체 만들기(10과 같음)Integer
Integer

이것은 다소 성가신 코드라고 생각하지 않습니까?

Java 제작자는 그렇게 생각했기 때문에 컴파일러에게 이러한 작업을 자동으로 수행하는 방법을 가르쳤습니다. intan을 an으로 자동 변환하는 것을 autoboxing (값을 상자에 자동으로 넣음) Integer이라고 하고, an을 an으로 변환하는 역 작업을 unboxing 이라고 합니다 .Integerint

귀하의 코드 컴파일러가 보는 것
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

오토박싱 및 언박싱 덕분에 변수 int에 안전하게 할당할 수 Integer있으며 그 반대도 가능합니다. int와 유형 을 구분하지 않고 복잡한 표현식을 작성할 수 있습니다 Integer.

예:

암호 컴파일러가 생성할 내용
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


4. 래퍼 변수 비교

오토박싱 및 언박싱은 간단하고 투명한 프로세스입니다. 필요에 따라 명령문을 사용 new Integer()하고 필요에 따라 메서드를 호출합니다 intValue().

프로그래머에게는 모든 것이 훌륭하고 쉽게 작동합니다. an 과 an 을 비교하는 경우 비교는 값이 아닌 참조를 기반으로 합니다 .IntegerInteger

암호 콘솔 출력
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

및 변수 a는 값을 b저장하지 않습니다 int. 개체에 대한 참조를 저장합니다. 즉, 올바르게 비교하는 방법을 기억하는 것이 중요합니다.

잘못된 오른쪽
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}