728x90
java에서 문자열을 생성에 여러 방법으로 생성할 수 있다.
그중 크게 2가지로 나누면 문자열 상수, 객체를 이용하여 생성(인스턴스로 저장된 문자열)으로 나뉜다.
두 방법의 차이는 문자열 상수는 String constant pool 공간에 저장이되고, 다른 방법으로 만들어진 객체는 Heap 공간에 저장이 된다.
즉, 두 문자열의 메모리 주소값이 다르다는 의미를 가지고 있다.
메모리 주소값이 다르면 == 연산자를 사용해 문자열 비교연산을 할 수 없다.
왜냐면 java8 에서 == 연산자는 기본 자료형에 저장된 값은 상수이므로 값을 기준으로 비교하나, 참조 자료형에 저장된 값은 메모리 주소값이기 때문에 메모리 주소값을 비교한다.
그럼 다른 방식으로 생성된 문자열을 비교하는 방법은 String class의 equal 메서드를 통해 비교하는 것이다.
equal 메서드는 저장된 문자열을 토큰화 하여 문자들이 서로 동일한지 문자를 하나씩 비교하는 방식이다.
참고
// 변수에 저장된 문자열 상수와 문자열 상수를 더하여 생성
String text = "테스트";
String name = text+"이름";
+ 연산자를 이용해 문자열을 name 변수에 생성하면 StringBuilder 인스턴스를 생성하고 연산하여 String 객체를 반환하게 된다. 즉, 변수 name은 인스턴스로 최종 변환된 상태가 된다.
728x90
'Java' 카테고리의 다른 글
[Java] 람다식 (0) | 2022.06.03 |
---|---|
[Java] 메모리 구조 (0) | 2022.05.31 |
[Java] 스코프(scope) : { } (0) | 2022.05.20 |
[Java] 암시적 형변환 (0) | 2022.05.17 |
[Java] 상수, 리터럴 (0) | 2022.05.10 |
댓글