랩퍼클래스 Wrapper Class
자료형은 기본형(Primitive, P타입)과 참조형(Reference, R타입)으로 나뉘는데,
컬렉션에 값을 담을 때 참조형(R)만 담을 수 있고 기본 자료형(P)은 담을 수 없기 때문에
P타입 자료형을 R타입 자료형으로 만들어 줄 때 랩퍼 클래스를 사용한다.
기본 자료형의 값을 멤버 변수의 값으로 저장하고,
이 값 주위로 값을 가공하는 메소드들이 감싸고 있다고 해서 랩퍼(Wrapper) 클래스라고 불린다.
다음과 같이 모든 기본 자료형에 대해 그에 대응하는 랩퍼 클래스가 있다.
기본 자료형 | 랩퍼 클래스 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
랩퍼 클래스에 값 저장하기
String str = new String("값"); 했던 것과 유사하게 저장하면 된다.
Integer integer = new Integer(10);
Integer integer2 = 10;
//Integer integer3 = "10"; ---- 오류 발생
System.out.println(integer); //10
System.out.println(integer2); //10
참조형 → 기본형 (R → P)
Integer to int
.intValue()로 캐스팅 없이 변환 가능
int numInt2 = integer2.intValue();
Integer to short
.shortValue()로 캐스팅 없이 변환 가능
short numShort = integer2.shortValue();
랩퍼클래스의 MIN_VALUE, MAX_VALUE
System.out.println(Integer.MIN_VALUE); //-2147483648
System.out.println(Integer.MAX_VALUE); //2147483647
랩퍼클래스의 진법 변환
10진법 to n진법
System.out.println(Integer.toBinaryString(3)); //11, 자료형은 String
System.out.println(Integer.toOctalString(9)); //11, 자료형은 String
System.out.println(Integer.toHexString(17)); //11, 자료형은 String
n진법 to 10진법
String b = Integer.toBinaryString(3);
String o = Integer.toOctalString(9);
String h = Integer.toHexString(17);
System.out.println(Integer.parseInt(b, 2)); //3
System.out.println(Integer.parseInt(o, 8)); //9
System.out.println(Integer.parseInt(h, 16)); //17
※ n진법 숫자 표현
- 2진법 0b _ _
int bi = 0b11; //2+1 = 3
- 8진법 0 _ _
int oi = 011; //8+1 = 9
- 16진법 0x _ _
int hi = 0x11; //16+1 = 17
※ n진법으로 저장했더라도, 십진법으로 반환된다.
int bi = 0b11; //2+1 = 3
int oi = 011; //8+1 = 9
int hi = 0x11; //16+1 = 17
System.out.println(bi); //3, 저장할 때와 관련없이 출력은 십진법으로
System.out.println(oi); //9
System.out.println(hi); //17
Integer - Integer 값 비교하기 (Integer vs Integer)
- == : 같은 객체이면 true, 아니면 false
- .equals() : 같은 값을 가지면 true, 아니면 false
- a.compareTo(b):
- a == b : 0
- a > b : +1
- a < b : -1
integer = 200; //integer: integer타입
integer2 = new Integer(200); //integer2: Integer타입
System.out.println(integer == integer2); //false :같은 객체가 아니므로
System.out.println(integer.equals(integer2)); //true :값은 같으므로
System.out.println(integer.compareTo(integer2)); //0 :값이 같으므로
int - Integer 값 비교하기 (int vs Integer)
numInt = 200;//int
integer3 = 200;//Integer
if(integer3.equals(numInt)) {
//.equlals는 입력 값이 Integer여야 하기 때문에
//컴파일러가 자동으로 numInt를 new Integer(numInt)로 변경하여 연산 → 결과가 "같아요."
System.out.println("같아요.");
}else {
System.out.println("달라요.");
}
오토박싱과 오토언박싱
오토박싱 R = p
integer3 = numInt3;
오토언박싱 p = R
integer3객체 안의 int값이 나와서 numInt3에 대입된다.
int numInt3 = integer3;
HashSet에 넣기
Set<Double> cSET = new HashSet<Double>();
cSET.add(rPI);//R
cSET.add(3.14);//p
ArrayList에 넣기
ArrayList<Integer> aar = new ArrayList<Integer>();
aar.add(integer3);//R
aar.add(integer2 + 10);//R
aar.add(123);//p
Object 객체 연산
obj를 이용하여 11 계산을 하는 방법은 다음과 같이 여러가지가 있을 수 있다.
방법1
int num4 = (int)obj + 1;
System.out.println(num4);//11
방법2
obj = "10";//obj의 자료형은 'Object'이고, 'String'이 아니다.
System.out.println(obj);//10
int num5 = Integer.valueOf((String)obj) + 1;//Object -> String으로 캐스팅 해주어야 함
System.out.println(num5);//11
방법3
obj = 10;//String은 Integer로 캐스팅이 불가능하므로 obj=10을 대입해주어야 함
int num6 = 5 + ((Integer)obj).intValue();
System.out.println(num6);
'BackEnd > Java' 카테고리의 다른 글
[Java] 제네릭 Generic (0) | 2021.07.14 |
---|---|
[Java] 컬렉션 Collection (0) | 2021.07.14 |
[Java] 메모리 Memory (0) | 2021.07.13 |
[Java] 열거 타입 Enum (0) | 2021.07.13 |
[Java] 다형성 Polymorphism (0) | 2021.07.13 |
댓글