String s1 = new String("A");
String s2 = "A";
//배열로 String 객체 생성
String s3 = new String(byte[] bytes);
//배열의 offset 인덱스부터 length만큼 String 객체 생성
String s4 = new String(byte[] bytes, int offset, int length);
리턴 타입 | 메소드 | 설명 |
---|---|---|
char | charAt(int index) | 특정 위치 문자 return |
boolean | equals(Object object) | 두 문자열 비교 |
byte[] | getBytes() | byte[]로 return |
byte[] | getBytes(Charset charset) | 주어진 문자셋으로 인코딩한 bytes[] return |
int | indexOf(String str) | 문자열 내에서 주어진 문자열의 위치를 return |
int | length() | 총 문자의 수(길이)를 return |
String | replace(CharSequence target, CharSequence replacement) | target 부분을 replacement로 대치한 새로운 문자열 return |
String | substring(int beginIndex) | beginIndex 위치에서 끝까지 잘라낸 새로운 문자열 return |
String | substring(int beginIndex, int endIndex) | beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열 return |
String | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열 return |
String | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열 return |
String | trim() | 앞뒤 공백을 제거한 새로운 문자열 return |
String | valueOf(int i) valueOf(double d) | 해당 기본 타입의 값을 문자열로 return |
기본 타입(byte, char, short, int, long, float, double, boolean) 변수의 값을 비교할 때에는 ==
연산자를 사용한다.
하지만 문자열을 비교할 때에는 ==
연산자가 조금 다른 결과를 가져 올 수있다.
아래 예시에서 살펴보면
String s1 = new String("A");
String s2 = "A";
String s3 = "A";
Java에서는 문자열의 리터럴(변수에 넣는 데이터)이 동일하다면 동일한 String 객체를 참조하게 되어있다.
그래서 위 그림처럼 s2와 s3는 힙 영역의 동일한 String 객체를 참조하지만, s1은 new 연산자로 생성된 다른 String 객체를 참조한다.
그래서 아래와 같이 ==
연산자는 각 변수에 저장된 번지를 비교하기 때문에 동일한 데이터를 가지고 있어도 결과가 다르게 나올 수 있다.
그래서 이때는 equals()를 사용해야 한다.
//false
s1 == s2
//true
s2 == s3
//true
s1.equals(s2)
//true
s2.equals(s3)