Java.lang.String
으로 사용되는 java 문자열 클래스인 String은 별도의 import 없이 사용 가능하다.
String str = "abcdef";
str[4] = 'E';
System.out.println(str); // 컴파일 에러
String str = "abcdef";
str = "ABCDEF";
System.out.println(str); // ABCDEF
======================================
String str = "abcdef";
char[] temp_arr = str.toCharArray(); // 배열로 변환
temp_arr[4] = 'E';
str = new String(temp_arr) // 배열을 string으로 변환 후 기존 str에 대입
System.out.println(str)// abceEf
java에서 ==
연산은 주소값을 비교하기 때문에 다음과 같은 경우에는 서로 다른 주소이므로 false가 발생한다
String str1 = "abc";
String str2 = new String("abc");
str1==str2 // false
리터럴 방식으로 선언한 서로 같은 두 문자열을 비교 시 true를 반환한다.
리터럴 방식으로 선언하면 String Constant Pool
이라는 영역에 할당된다.
// 리터럴 방식 선언
String str_literal1 = "test";
String str_literal2 = "test";
str_literal1 == str_literal2 // true
위와 같이 선언하면 String constant pool
영역 내에 "test"가 할당되고
두개 모두 하나의 "test"를 가르키게 된다.
따라서 비교시 true가 나옴
반면 객체 방식으로 선언한 서로 같은 두 문자열을 비교하면 false를 반환한다.
// 객체 방식 선언
String str_object1 = new String("test");
String str_object2 = new String("test");
str_object1==str_object2 // false
기존에 같은 값을 가지고 있는 string이 heap 영역에 있더라도 따로 확인하지 않고 새로운 주소에 선언하기 때문.
String의 value를 비교하는 방법은 .equals(value)
를 사용하면 된다.
String str_literal1 = "test";
String str_object1 = new String("test");
String str_object2 = new String("test");
str_literal1.equals(str_object1) // true
str_literal1.equals(str_object2) // true
str_object1.equals(str_object2) // true
Method name | Return Value | 설명 |
---|---|---|
charAt(int index) | char | index 번째 문자 |
length() | int | 문자열의 길이 |
equals(Object) | boolean | 두 문자열 비교 |
toCharArray() | char[] | 문자열을 변환한 character array |
compareTo(String) | int | 두 문자열을 사전순으로 비교한 결과 |
contains(char) | boolean | 문자열 포함 여부 |
replace(char target,char replacement) | String | targer을 replacement로 변경 |
substring(int startIndex,int endIndex | String | [startIndex,endIndex) fmf 가지는 새 문자열 반환 |
indexOf(int ch,int fromIndex | int | fromIndex 부터 ch 문자가 나타나는 가장 첫 인덱스 |
2025.01.22