자바의 자료형은 기본 타입(primitive type)과 참조 타입(reference type)으로 이뤄진다.
하지만 기본 타입을 객체로 다뤄야하는 경우가 생긴다
기본 자료타입을 객체로 다루기 위해서는 사용하는 클래스를 래퍼 클래스라고 함
기본 타입의 값을 내부에 가지는 객체(포장객체)를 만들어 사용
ex) ArrayList<int> s = new ArrayList<int>(); (X)
ArrayList<Integer> s = new ArrayList<Integer>(); (O)
Wrapper Class는 immutable type이라 값 변경 불가능.
변경할려면 새로 assign해야됨.
Integer a = 10;
a = 30; (X)
Integer b = 30;
byte, char, int, float, double, boolean,long, short
Byte, Character, Integer, Float, Double, Boolean, Long, Short
박싱(Boxing)
기본 타입 -> 래퍼클래스
언박싱(Unboxing)
래퍼클래스 -> 기본 타입
Integer num = new Integer(17); // 박싱
int n = num.intValue(); //언박싱
기본타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있습니다.
자동 박싱의 포장 클래스 타입에 기본값이 대입될 경우에 발생합니다.
예를 들어 int타입의 값을 Integer클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer객체가 생성됩니다.
래퍼 클래스 객체끼리는 == 연산자가 안됨, 왜냐 주소값을 비교하기 때문에 (String이랑 비슷함)
객체끼리 비교하기 위해선 equals 메소드를 이용해야함
객체 <-> 기본 타입은 ==, equals 사용시 오토박싱/언박싱을 지원함
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = 17; // 자동 박싱
int n = num; //자동 언박싱
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = new Integer(10); //래퍼 클래스1
Integer num2 = new Integer(10); //래퍼 클래스2
int i = 10; //기본타입
System.out.println("래퍼클래스 == 기본타입 : "+(num == i)); //true
System.out.println("래퍼클래스.equals(기본타입) : "+num.equals(i)); //true
System.out.println("래퍼클래스 == 래퍼클래스 : "+(num == num2)); //false
System.out.println("래퍼클래스.equals(래퍼클래스) : "+num.equals(num2)); //true
}
}
기본 타입, 객체간의 비교엔 ==, equals() 모두 사용 가능
(컴파일러가 자동으로 오토박싱과 언박싱을 해주기 때문)
객체, 객체간의 비교엔 == 사용불가능, equals()만 사용 가능
(String과 동일함)
==를 사용하게 되면 객체의 주소값끼리 비교한다.
래퍼 클래스와 기본자료형과의 비교는 == 연산과 equals연산 모두 가능합니다.
추가, -128 ~ 127 범위의 int 타입을 래퍼 클래스로 만들면 same 객체를 참조하게 됨.