Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- parameter group
- Wrapper class
- identityHashCode
- 얕은 복사
- has-a
- 엔드포인트
- 내부클래스
- finalize
- shebang
- 자바
- singletone
- Up Casting
- Inbound
- public static final
- constructor
- pycharm
- Stream
- dbeaver
- access modifier
- extends
- 파이참
- node.js
- down casting
- 깊은 복사
- generic programming
- lambda
- Java
- arraycopy
- 셔뱅
- 스트림
Archives
- Today
- Total
٩(๑•̀o•́๑)و
20200308 - String, Wrapper Class 본문
String Class
String Class 선언시
- new 사용 - 힙메모리에 할당
- 리터럴을 사용 - 상수풀에서 가져온다. - 상수풀에 동일한 값이 이미 있다면 그걸 가져다가 씀(공유)
- new와 리터럴을 사용하는 것은 다른 의미.
- 혼용하여 사용시 메모리 주소를 비교했을때 예상치 못한 결과를 얻을 수도 있음.
String str1 = new String("abc"); //인스턴스로 생성됨 - 힙메모리
String str2 = "abc"; //상수풀에 있는 문자열을 가리킴
new 사용시엔 힙메모리에 할당 & 리터널 사용시 상수풀에서 가져다 쓰는 것은 Integer , Double 등의 클래스에서도 동일하게 적용됨
String은 immutable (불변성)
- 한번 선언되거나 생성된 문자열을 변경할 수 없음 - String의 소스를 보면 final로 선언된 배열이 있고 여기에 값을 넣고 빼기때문. final이기때문에 변하지 않음
- String 클래스의 concat()메서드 혹은 "+"를 이용하여 String을 연결하는 경우 문자열은 새로 생성됨 => 따라서 이전 String값들은 가비지가 됨 => String값을 계속 연결하여 결과를 만들 경우 메모리 낭비가 발생한다.(계속 가비지가 발생)
- 이 경우에는 StringBuilder나 StringBuffer를 사용하면 됨
StringBuilder 와 StringBuffer
- 가변적인 char[] 배열을 멤버변수로 가지고 있는 클래스 - 가변적인 배열을 갖게 됨. 한번 생성된 후 계속 연결하여 덧붙여나감.
- 문자열을 변경하고나 연결하는 경우 사용하면 편리한 클래스들.
- StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(Synchronization)이 보장됨.
- 단일 쓰레드 프로그래밍에서는 StringBuilder를 사용하는 것이 더 좋음. (StringBuilder는 멀티쓰레드환경에서 동기화가 지원되지 않음)
- toString() 메서드로 String 반환
Wrapper 클래스
- 기본 자료형에 대한 클래스
- 기본 자료형은 c, c++에서 넘어온 것
- 기본 자료형을 감싸고있다는 의미에서 Wrapper클래스라고함
- Wrapper클래스에는 toString(), hashCode(), equals() 등 Object클래스의 많은 메서드들이 오버라이딩되어있다.
- 역시 new했을땐 힙메모리에, 리터럴로 사용시엔 상수풀에서 갖고온다.
- java5이전에는 int타입(기본형)과 Integer타입(Wrapper클래스타입)간의 연산이 불가했었음..지금은 기본형과 Wrapper 클래스간의 호환이 잘 되어있음
기본형 | Wrapper 클래스 |
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
'Java' 카테고리의 다른 글
20200308 - 컬렉션 프레임워크 (0) | 2020.03.09 |
---|---|
20200308 - Generic 프로그래밍 (0) | 2020.03.08 |
20200307 - Object Class (0) | 2020.03.07 |
20200307 - 인터페이스 (0) | 2020.03.07 |
20200306 (0) | 2020.03.06 |