Super Coding Addict
Ch10. 자바 기본 클래스 (6) - String, Wrapper 클래스 본문
* String 클래스
- String 클래스 선언하기
String str1 = new String("abc"); // 인스턴스로 생성됨 (힙메모리에 할당)
String str2 = "abc"; // 상수풀(Constant Area)에 있는 문자열을 가리킴
- 예제
# StringTest 클래스
package ch10.string;
public class StringTest {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2); //false
String str3 = "abc";
String str4 = "abc";
System.out.println(str3 == str4); //true
}
}
* String은 immutable (배열이 final이기 때문)
- 한번 선언되거나 생성된 문자열은 변경 불가
- String 클래스의 concat() 메서드 또는 +를 이용하여 String을 연결하면, 문자열은 새로 생성됨
=> 새로 생성된 문자열을 가리키게 된다
- 예제
# StringTest2 클래스
package ch10.string;
public class StringTest2 {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
System.out.println(System.identityHashCode(java)); //1435804085
java = java.concat(android);
System.out.println(java);
System.out.println(System.identityHashCode(java)); //1784662007
}
}
--> java에 concat(android)를 한 결과 출력을 해보면 javaandroid가 찍히지만, 이는 문자열 "java"에 "android"를 그대로 붙인 게 아니라 두 개를 합친 문자열을 가리키고 있기에 찍히는 것
--> 변수 java의 hashcode값을 찍어보면 결국 가리키고 있는 것이 다르기 때문에 다른 값이 찍힌다
* StringBuilder와 StringBuffer
- 가변적인 char[] 배열을 멤버변수로 가지고 있는 클래스 --> cf. String의 배열은 final
=> 문자열을 변경하거나 연결하는 경우 사용하면 편리
- StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(Synchronization)가 보장됨
=> 단일 쓰레드 프로그래밍에서는 StringBuilder를 사용하는 것이 더 좋음
- String타입으로 바꿔야 할 때 toString() 메서드로 String 반환
- 예제
# StringBuilderTest 클래스
package ch10.string;
public class StringBuilderTest {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
StringBuilder buffer = new StringBuilder(java);
System.out.println(System.identityHashCode(buffer)); //1435804085
buffer.append(android);
System.out.println(System.identityHashCode(buffer)); //1435804085
java = buffer.toString();
}
}
--> StringBuilder에 String을 append해도 HashCode는 변하지 않는 것을 보아 String과 달리 힙메모리에 할당된 같은 위치를 계속 가리키고 있음을 알 수 있다
* Wrapper 클래스
- 기본 자료형(Primitive Type)에 대한 클래스
'JAVA 문법' 카테고리의 다른 글
Ch8. 추상 클래스 (1) (0) | 2021.03.06 |
---|---|
Ch11. 컬렉션 프레임 워크 - 제네릭 프로그래밍 (0) | 2021.03.04 |
Ch10. 자바 기본 클래스 (5) - 코딩해보기 (0) | 2021.03.02 |
Ch10. 자바 기본 클래스 (4) - Class 클래스 (0) | 2021.03.01 |
Ch10. 자바 기본 클래스 (3) - Object 클래스 (0) | 2021.03.01 |