[자바/JAVA] 문자열(String)에 대해 알아보자✍️

박정현·2023년 7월 16일
0
post-thumbnail

String

1) String

먼저 String타입에 대해 알아보고 다음에 나머지 참조형타입에 대해 알아보겠다.

  • 작은 따옴표(’’)를 감싼 문자는 char타입에 저장된다고 했는데 큰따옴표(””)로 감싼 문자열은 String 타입에 저장된다.

문자열을 String타입에 저장된다? ❌

사실은 문자열은 String타입에 “저장”되는 것이 아니다. 참조형 타입은 객체의 번지를 참조한다고 했다. 따라서 문자열이 String타입에 직접 저장되는 것이 아니라 String객체를 생성하고 변수는 String객체를 참조하게 되는 구조이다.

🙋‍♂️ String을 선언해보고 어디에 저장하는지 확인해보자.

String student;
student = "김자바";
String grade = "3학년";

  • 2개의 String 변수를 선언하고 초기화했다.
  • 위의 그림을 보면 student, grade변수는 스택영역에, 문자열은 힙영역에 생성되었다. 또한 student, grade 변수에 String 객체의 번지값이 저장된다.

3) 문자열비교

✨ 자바에서는 문자열 리터럴이 같으면 동일한 객체를 참조한다.

String student1 = "김자바";
String student2 = "김자바";

✨ 자바에서는 new 생성자를 통해 새로운 객체를 생성할 수 있다.

String student1 = new String("김자바");
String student2 = new String("김자바");

  • 위의 그림에서와 같이 new로 객체를 생성하면 같은 문자열이더라도 student1과 student2는 다른 String객체를 참조한다.
  • 즉, 문자열 리터럴로 생성하느냐 new연산자로 생성하느냐에 따라 비교연산자의 결과가 달라질 수 있다.

🙋‍♀️ 비교연산자의 결과가 어떻게 나오는지 확인해보자.

String student1 = "김자바"; //문자열 리터럴로 객체생성
String student2 = "김자바";
String student3 = new String("김자바"); //new 연산자로 객체생성
student1 == student2; //true
student2 == student3; //false: 다른 객체를 참조하므로 false가 나온다.
boolean result = student2.equals(student3)); //true
  • student1 과 student2는 다른 객체를 참조하므로 false를 반환한다.
  • equals()메소드는 객체와 상관없이 문자열만 비교하여 같으면 true, 다르면 false를 반환한다. 따라서 student1, student2, student3 모두 같은 문자열이므로 true가 반환된다.

4) 이스케이프 문자

  • 문자열 내부에는 역슬래시()가 붙은 문자를 사용할 수 있는데 이를 이스케이프 문자라고 한다.

  • 이스케이프문자를 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다.

    이스케이프 문자내용
    \t탭만큼 띄움
    \n줄 바꿈
    \r캐리지리턴
    \”“출력
    \’‘출력
    \\출력
    \u16진수16진수 유니코드에 해당하는 문자 출력

🙋‍♂️ 예제를 통해 확인해보자.

String str1 = "나는 \"사과\"를 좋아합니다.";
String str2 = "사과\t포도\t바나나";
String str3 = "사과\n\포도\n\바나나";

요약

큰따옴표로 감싸진 문자열은 String타입에 직접 저장되는 것이 아니라 String객체를 생성하고 변수는 String객체를 참조하게 되는 구조이다.

같은 문자열은 동일한 객체를 참조하는데 new연산자를 통해 객체를 생성하면 같은 문자열이더라도 다른 객체를 참조한다. equals()메소드를 이용하면 문자열만 비교할 수 있다.

문자열 내부에서 특정문자를 사용할 수 있게 하는 이스케이프문자가 있다.

profile
개발을 개발괴발하지 않기 위한 노력

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

잘봤습니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기