본문 바로가기

# 02/Java

[윤성우의 열혈자바] 11-2. String 클래스

반응형

String 인스턴스 생성의 두 가지 방법


String str1 = new String ( "Simple String" );


String str2 = "The Best String";


둘 다 String 인스턴스의 생성으로 이어지고 그 결과 인스턴스의 참조 값이 반환된다.







String 인스턴스와 println 메소드


System.out.println ( "Funny String" );


System.out.println( String str ) { ... }


->  일단 "Funny String" 이라는 String 인스턴스가 생성되고 참조값을 메소드로 전달하는 것임!!

str 은 전달받은 String 인스턴스의 참조값을 가르키게 됨!







문자열 생성 방법 두 가지의 차이점


class ImmutableString {

public static void main ( String[] args ) {

String str1 = "Simple String";

String str2 = "Simple String";


String str3 = new String ( "Simple String" );

String str4 = new String ( "Simple String" );


if ( str1 == str2 )

System.out.println( "str1과 str2는 동일 인스턴스 참조" );

else

System.out.println( "str1과 str2는 다른 인스턴스 참조" );


if ( str3 == str4 )

System.out.println( "str3과 str4는 동일 인스턴스 참조" );

else

System.out.println( "str3과 str4는 다른 인스턴스 참조" );

}

}


->  str1과 str2는 동일 인스턴스 참조

str3과 str4는 다른 인스턴스 참조







String 인스턴스는 Immutable 인스턴스


String 인스턴스는 Immutable 인스턴스! - 인스턴스 안에 문자열을 저장할 때 데이터 변경안됨. 새로 만들어야 됨!!


따라서 생성되는 인스턴스의 수를 최소화 한다.


public static void main( String[] args ) {

String str1 = "Simple String";

String str2 = str1;


. . .



public static void main( String[] args ) {

String str1 = "Simple String";

String str2 = new String ( "Simple String" );


. . .



이후로 두 코드에 어떠한 차이점을 부여할 수 있겠는가? (사실상 차이가 없다는 의미)


JVM은 효율성을 고려해서 기존의 똑같은 문자열 String을 선언하면 기존에 있는 참조변수를 공유한다.

꼭 다른 인스턴스를 참조하고 싶으면 두 번째 방법인 new String( " ... " ) 해주면 됨!! (근대 굳이...?)







String 인스턴스 기반 switch문 구성


public static void main( String[] args ) {

String str = "two";


switch (str) {

case "one" :

System.out.println("one");

break;

case "two" :

System.out.println("two");

break;

default : 

System.out.println("default");

}




반응형