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");
}
}
'# 02 > Java' 카테고리의 다른 글
[Java] String과 StringBuffer, StringBuilder의 차이점 (0) | 2019.10.21 |
---|---|
[윤성우의 열혈자바] 11-3. String 클래스의 메소드 (0) | 2019.10.21 |
[윤성우의 열혈자바] 11-1. 메소드의 오버로딩 (0) | 2019.10.21 |
[윤성우의 열혈자바] 10-4. 또 다른 용도의 static 선언 (0) | 2019.10.21 |
[윤성우의 열혈자바] 10-3. System.out.println() (0) | 2019.10.21 |