문자열은 내부적으로 '클래스'로 구성되어 있다.
내부에는 문자 배열로 된 데이터가 있다. char[]
한번 만든 문자열은 변하지 않는다. (Immutable)// 이뮤터블
문자열 편집은 String을 쓰지 않고 StringBuilder나 StringBuffer 등을 사용한다.
public class StringTest {
public static void main(String[] args) {
String s = "안녕하세요";
String s1 = s;
s += " 슈가에 아유미에요";
System.out.println(s); // 안녕하세요 슈가에 아유미에요
System.out.println(s1); // 안녕하세요
}
}
String 변수명 = "값";을 통해 생성
클래스이기에 new 생성자 사용해서 생성할 수 있지만 권장하지 않음(힙메모리중 young메모리에 생성됨 )
String은 String 풀 에 생성되고 중복된 문자를 다른 변수로 생성할 때 해당 값을 참조해서 사용
힙메모리에는 Young memory(nursery?)와 Old memonry가 있음
아래의 상수풀로되어있는것 => String 풀로 치환되어야함
String s1 = "문자열 생성 방법"; // 보통의 생성 방법, String 변수명 = "값";
String s2 = new String("문자열 생성 방법2"); // 클래스 생성자. 권장하지 않음
String s3 = "abcde"; // String 생성하면 상수풀에 생성됨
String s4 = "abcde"; // 상수풀에 동일한 문자열이 있으면 그것을 참조하고 없으면 상수풀에 새로 생성함
String s5 = new String("abcde"); // 흙빛이 되어버림.. 구지 생성한다고?// 힙메모리에 생성됨
System.out.println(s3 == s4); //true // 문자열을 곧바로 생성할 경우 상수 풀에서 찾아 사용
// String은 immuntable하기에 같은값을 참조해도 문제가 발생하지 않음
System.out.println(s3 == s5); //false // 문자열을 클래스로 생성할 경우 새로운 인스턴스를 생성하기에 참조값이 다름
System.out.println(s3.equals(s4));//true // equals는 무슨 메서드였지? -> String 값비교 메서드.
System.out.println(s3.equals(s5));//true // 참조 값이 아닌 실제 값을 비교해주는 메서드
length() 스트링의 길이 출력
charAt(index) index에 위치한 char 출력
indexOf('char') 'char'이 몇번 index에 위치하는가 출력
equalsIgnoreCase("string") string과의 값비교 같으면 true(대소문자구분 x)
replace('i','t') char 'i'를 't'로 바꾸어서 출력(기존 값에는 영향x)
substring(a, b) index a~(b-1)번째까지 출력해줌 (b는 포함안됨)
trim() 양옆의 공백 제거해주는 메소드
repeat(i) string을 i만큼 반복시켜주는 메서드
toCharArray() String을 char단위로 새로운 배열에 넣어줌.
equals(anObject) anObject와 비교한 결과 출력(boolean)
String s = "This is a string.";
System.out.println(s.length()); //16 //length 같이 이름만들어도 기능이 예상되는게 잘지은 이름이다.
//이름을 짓기 어려운 기능은 메서드로 만들지 않는 것이 좋다.
System.out.println(s.charAt(2));//i
System.out.println(s.indexOf('a'));//8 // a가 몇번 인덱스에 위치하는가?
System.out.println(s.equalsIgnoreCase("this Is A STRiNg."));//true//문자열비교해서 같은면true
// 대소문자 구분x
System.out.println(s.replace('i','t'));//Thts ts a strtng.//기존의 String을 바꾸는것은 아님
//변경된 String을 생성해서 출력하는 것
System.out.println(s);//This is a string.// 기존 내용 유지
System.out.println(s.substring(3, 9));//s is a // index 3~8번까지 출력해줌(마지막 인덱스 제외)
System.out.println(" wwefw ".trim());//wwefw// 양옆의 공백 제거해주는 메소드
System.out.println("*".repeat(10));//********** //문자열을 반복해줌
// 추가적인것은 더 찾아서 사용하면 된다.
char[] characters = s.toCharArray();
for(char value : characters){
System.out.println(value);
} // String의 배열을 불러온것이 아닌 새로운 배열을 만든것임// so 여기 배열 내용 변경시켜도 원문에 변화없음