문자열을 어딘가에 담을땐 문자열의 내용이 아닌 문자열이 담긴 메모리주소의 참조값이 담긴다.
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는 다른 인스턴스 참조"); } }
위에서 str 1, str 2 두개와 str 3, str 4 두개는 생성방식도 달라진다.
1과 2는 리터럴로생성되어 문자열이 먼저 메모리에 올라간 후 각 1 과 2 주소값에 들어간다면
34는 각 방이 만들어지고 값이 들어간다
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"); } }
따라서 위의 경우 switch 문은 정수를 기반으로 생성되기때문에
사용가능
기본자료형 값 문자열로 바꾸기
double e = 2.718281; String se = String.valueOf(e); //.val~ 로 호출한것으로보아 //.value 는 static함수
String str = "AB".concat("CD").concat("EF"); → String str = ("AB".concat("CD")).concat("EF"); → String str = "ABCD".concat("EF"); → String str = "ABCDEF";
여기서는 사실 각각의 "" 안에 담긴 문자열들이
저마다 메모리에 할당된다!
스트링 원본불변의 법칙에 따라
"AB".concat("CD")
이 과정에서 ab 와 cd, 그리고 합쳐진 값이 들어갈
총 세개의 방이 생긴다
따라서 최소한의 인스턴스를 생성시키기위해
문자열결합시에는 최적화를 이뤄야한다
String birth = "<양>" + 7 + '.' + 16; //위 자료들을 결합하려한다면... String birth = ( new StringBuilder("<양>") .append(7).append('.').append(16)).toString();
그 외에 문자열에 덧붙여 사용하는 함수들은 아래와 같다
**문자열이름.함수(값);** + .append(45678); //문자열 덧붙이기 + .delet(0,2); //0번방부터, 2-1번방까지 지운다 + .replace(0, 3, "AB"); //0번방부터 3-1번방까지 "" 로바꾼다 + .reverse(); //뒤집는다! + String sub = 기존문자열.substring(2, 4); //2번자리부터 4-1 자리까지 System.out.print(sub); >문자 출력됨 //일부만 문자열로만든다