char[]
를 사용해야 하지만 이 방법은 불편하기 때문에 String
클래스가 생겼다.String
은 클래스로 참조값만 들어갈 수 있지만 편의상 문자열을 쌍 따옴표로 감싸면new String()
으로 변경해준다.length()
: 문자열의 길이를 반환charAt(int index)
: 특정 인덱스의 문자를 반환substring(int beginIndex,int endIndex)
: 문자열의 부분 문자열을 반환indexOf(String str)
: 특정 문자열이 시작되는 인덱스를 반환toLowerCase()/toUpperCase()
: 문자열을 소문자/대문자로 변환trim()
: 문자열 양 끝의 공백을 제거concat(String str)
: 문자열을 더함 String
은 본래 클래스로 기본형이 아닌 참조형이다. 참조형은 변수에 계산할 수 있는 값이 들어있는게 아닌 계산이 불가능한 참조값이 들어있어 +같은 연산은 불가능하다.
String
이 제공하는 concat()
같은 메서드를 사용해야 하지만, 문자열은 자주 다루어지기 때문에 편의상 + 연산이 가능하다.equals()
메서드를 사용하여 두 객체가 논리적으로 동일한지 확인 package lang.string.immutable;
public class StringImmutable1 {
public static void main(String[] args) {
String str = "hello";
str.concat(" java");
System.out.println("str = " + str);
}
}
String
은 불변객체이므로 str="hello"
값이 그대로 나온다.equals(Object anObject)
: 두 문자열이 동일한지 비교
equalsIgnoreCase(String anotherString)
: 두 문자열을 대소문자 없이 구분
compareTo(String anotherString)
: 두 문자열을 사전 순으로 비교
compareToIgnoreCase(String anotherString)
:두 문자열을 대소문자 구분 없이 사전적으로 비교
startsWith(String perfix)
: 문자열이 특정 접두사로 시작하는 지 확인
endsWith(String suffix)
: 문자열이 특정 접미사로 끝나는지 확인
subString(int begin)/subString(int begin,int end)
: 문자열의 부분 문자열 반환concat(String str)
: 문자열의 끝에 다른 문자열을 붙임replace(charSequence target,charSequence replacement)
:특정 문자열을 새 문자열로 대체replaceAll(String regex,String replace)
: 문자열에서 정규표현식과 일치하는 부분을 새 문자열로 변경trim()
: 문자열 양쪽 끝의 공백 제거toLowerCase()/toUpperCase()
: 문자열을 소문자나 대문자로 변환strip()
: whitespace와 유니코드 공백을 포함해서 제거split(String regex)
: 문자열을 정규 표현식을 기준으로 분할join(charSequence ....)
: 주어진 구분자로 여러 문자열을 결합contains(charSequence s)
: 문자열이 특정 문자열을 포함하고 있는지 확인indexOf(String ch)/indexOf(String ch,int index)
: 문자열이 처음 등장하는 위치 반환lastIndexOf(String ch)
: 문자열이 마지막으로 등장하는 위치 반환valueOf(Object obj)
: 다양한 타입을 문자열로 변환toCharArray()
: 문자열을 문자 배열로 변환String
단점 불변인 String의 단점은 문자를 더하거나 변경할 때 마다 새로운 객체를 생성해야 한다는 점이다. 문자를 자주 더하거나 변경해야 하는 상황이면 더 많은 객체를 만들고 GC해야한다. 결과적으로 컴퓨터의 메모리 자원을 많이 소모하게 만드는 문제가 있다.
이 문제를 해결하기 위해 가변의 String
인 StringBuilder
가 만들어졌다. 가변은 내부의 값을 바로 변경하면 되므로 새로운 객체를 생성할 필요가 없어, 성능과 메모리 사용면에서 불변보다 효율적이다.
StringBuilder()
: StringBuidler
객체를 생성append()
: 여러 문자열을 추가insert()
: 특정 위치에 문자열 삽입delete()
: 특정 범위의 문자열 삭제reverse()
: 문자열 뒤집기toString()
: StringBuidler
를 String
으로 변경