Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch10. 자바 기본 클래스 (6) - String, Wrapper 클래스 본문

JAVA 문법

Ch10. 자바 기본 클래스 (6) - String, Wrapper 클래스

밍응애 2021. 3. 3. 23:11

* 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)에 대한 클래스