jiseongkimu / java_test_1330

0 stars 0 forks source link

2020/09/18 Boxing&UnBoxing #19

Open jiseongkimu opened 4 years ago

jiseongkimu commented 4 years ago

Wrapper Class

primitive type을 객체로 다루기 위해 사용하는 클래스

primitive type wrapper class
byte Byte
char Character
int Integer
float Float
double Double
boolean Blooean
long Long
short Short

Boxing & UnBoxing

기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고 반대로 포장객체에서 기본타입의 값을 얻어내는 과정을 언박싱이라고 한다.

public class Wrapper_Ex {
    public static void main(String[] args)  {
        Integer num = new Integer(17); // 박싱
        int n = num.intValue(); //언박싱
        System.out.println(n);
    }
}

AutoBoxing &AutoUnBoxing

int타입의 값을 Integer클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer객체가 생성된다.

public class Wrapper_Ex {
    public static void main(String[] args)  {
        Integer num = 17; // 자동 박싱
        int n = num; //자동 언박싱
        System.out.println(n);
    }
}
jiseongkimu commented 4 years ago
    String name1 = "a";
    String name2 = "a";
    String name1_o = new String("a");
    String name2_o = new String("a");
    System.out.println("name1 == name2 : " + (name1 == name2)); //true
    System.out.println("name1.equlas(name2)" + (name1.equals(name2))); //true
    System.out.println("name1_o == name2_o : " + (name1_o == name2_o)); //false
    System.out.println("name1_o.equlas(name2_o)" + (name1_o.equals(name2_o))); //true

    //래퍼 객체는 내부의 값을 비교하기 위해 == 연산자를 사용할 수 없습니다
    // 이 연산자는 내부의 값을 비교하는 것이 아니라 래퍼 객체의 참조 주소를 비교하기 때문입니다.
    // 비교 대상인 래퍼는 객체이므로 서로의 참조 주소가 다릅니다. 객체끼리의 비교를 하려면 내부의 값만 얻어 비교해야 하기에 equals를 사용해야 합니다.
    // 래퍼 클래스와 기본자료형과의 비교는 == 연산과 equals연산 모두 가능합니다. 그 이유는 컴파일러가 자동으로 오토박싱과 언박싱을 해주기 때문입니다.