그러하다
나는 그냥 되는대로 쓰던 개발자이다
올해의 목표는 자바 기초 정리를 좀 해보는 것.
쓸 줄은 아는데 설명할 줄을 모르는 멍청한 개발자는 이제 그만 두려고 한다.
그래서, 새해니까, 호기롭게 자바 강의를 듣기 시작했다.
첫 강의는 여전히 variables
'아 이건 겁나 쉽지 아 이걸 모를리가!!!?' 라는 마음가짐으로 인스타 둘러보기나 하며 무성의 하게 듣고 있다가
문득, 아 그럼 int와 Integer의 차이를 내가 "제대로" 설명할 수 있는가에 대한 의문이 들었다. 그래서 이 글을 쓰게 되었다 ^.^...
기본형(Primitive) vs 래퍼클래서(Wrapper Class)
기본형
- byte, string, char, short, int, long, float, double (8가지)
- Stack 메모리 공간에 저장
래퍼클래스
- Integer, Boolean, String, Character...
- 기본형을 클래스형으로 만든 것
- Heap 메모리 공간에 저장
래퍼클래스의 특징
- 기본형의 경우 값을 비교하지만, 참조형의 경우 '주소' 를 비교
즉, 값을 비교하는 경우 == 사용 할 수 없음, equals를 사용해야 합니다.
Integer a = 1;
Integer b = 1;
a == b => false
2) 불변 -> 기존값을 변경할 수 없음.
3) String은 조금 특별한 래퍼클래스 == / equals 둘 다 사용가능
- 리터럴로 생성하는 경우(String a = "abcd") intern()함수가 호출되어 값이 Heap String pool에 저장됨. 이 경우 == 으로 비교가능
- new String("abcd")으로 생성하는 경우, Heap에 저장됨. 그러므로
new String("abcd") == "abcd"는 같지 않는 값으로 여겨짐.
참조
https://www.youtube.com/watch?v=eqltmFST-N8
래퍼클래스를 도대체 왜 써야하는데?
- 형 변환이 쉽다.
- null 비교가 용이하다(기본값이 null)
래퍼클래스와 꼭 함께 나오는 박스와 언박싱
- 박싱은 말그대로 기본형을 객체로 만드는 것
- 언박싱은 객체형을 기본형으로 만드는 것
래퍼클래스 - Call by Value