반응형

package com.access.string;


/*

 * 자바에서 String이란,  문자값들의 연속을 나타내는 객체이다.

 * 문자의 배열도 String과 똑같이 작동한다.

 * 

 *  compare(),concat(),equals(),split(),

 *  length(),replace(),compareTo(),intern(),substring()... 등 다양한 메소드를 지원한다.

 *  

 *  게다가 String은 아래의 3개 메소드를 구현하고있다.

 *  - Serializable

 *  - Comparable

 *  - CharSequence 

 *  

 *   

 */

public class StringTest {

public static void main(String[] args) {

//test1( );

//test2();

test3();

}


public void test() {

char[] ch = { 'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't' };

String s = new String(ch);

System.out.println(s);

}


/*

* CharSequence Interface 는 문자의 연속을 나타내기위해 사용하는 인터페이스인데, 

* String, StringBuffer,StringBuilder 클래스들이 구현하고있다.

* String 객체를 만드는 2가지 방법이 있다. 

* 1. string literal 2. new keyword

* 1.쌍따옴표를 사용해서 객체를 생성한다. 

* String s = "welcome"; 과 같이 ""로 감싸서 String임을 JVM한테 알려준다. 

* 매번 String 문자를 만들때마다 JVM은 string contant pool을 체크한다.

*  만약 pool에 해당 string이

* 이미 존재한다면 pooling 인스턴스를 참조하여 리턴한다.

*/

public static void test2() {

String s1 = "Welcome";

String s2 = "Weclome"; // 새로운 인스턴스를 만들지않음.

/*

* 1번 방법으로 String 객체를 만들어봅시다.

*  먼저, "Welcome"이란 값을 가진 String객체를 string constant pool에서 JVM은 찾지않습니다. 

* s1 객체가 생성되면 그 다음 pool에서 "Welcome"이라는 값을 가진 string을 찾기

* 시작할겁니다.

* 그리고 pool에서 "Welcome"을 찾으면 새로 인스턴스를 생성하지않고 참조하고있는 인스턴스를 리턴하죠.

* 한마디로 이미 생성된 string에 대해서는 중복 인스턴스를 허용하지않고

*  효율적으로 같은 값을 가진 동일한 인스턴스를 리턴하게됩니다. 

*  (게다가, String object는 string constant pool이라는 특별한 메모리에 저장됩니다.)

* 그럼 자바는 왜 string literal 개념을 사용하는가? 

* 메모리를 효율적으로 관리하기위해서 위 개념을 사용하고있습니다. 

* 중복은 숙적이니까요.

*/


}


public static void test3() {

String s1 = "java";

char[] ch = { 's', 't', 'r', 'i', 'n', 'g', 's' };

String s2 = new String(ch); // new keyword로 string 객체를 생성.

String s3 = new String("example");

System.out.println(s1);

System.out.println(s2);

System.out.println(s3);

}

}


// String 객체의 메소드들은 나중에 한번에 정리해서 올리겠습니다~


반응형
by 발전소장 에르 :) 2017. 9. 30. 00:16