개발 일지/Java

[Java] 문자열(String)

미숫가루설탕많이 2022. 12. 21. 23:07

 문자열이란 문자들로 구성된 문장을 의미하며, 자바에서 문자열을 나타내는 자료형은 String이다. String 타입의 변수를 선언하고 문자열 리터럴을 할당하는 방법은 다음과 같다.

 

// 기본적으로 String 타입은 큰 따옴표(")로 감싸진 문자열을 의미

String name; // 변수 선언
name = "Kim Coding"; // 변수에 문자열 리터럴 할당

// 아래와 같이 선언과 동시에 할당도 가능하다.
String name = "Kim Coding";

 

 또는 다음과 같이 표현할수도 있다.

String name = new String("Kim Coding"); // String 클래스의 인스턴스를 생성

 

 어떤 클래스를 통해 인스턴스를 생성하면 해당 인스턴스의 타입은 자신을 생성해낸 클래스를 타입으로 가진다. 따라서, String 클래스를 통해 만들어진 인스턴스는 String 타입의 변수에 할당할 수 있다.

 

String name1 = "Kim Coding";
String name2 = "Kim Coding";


String name3 = new String("Kim Coding");
String name4 = new String("Kim Coding");

 

 문자열 리터럴을 String 타입의 변수에 직접 할당하는 방법을 사용할 경우에 동일한 문자열 리터럴을 두 변수에 할당하면 두 변수는 같은 문자열의 참조값을 공유한다. 즉, 위 코드의 name1과 name2가 저장하게 되는 문자열의 주소값은 같다.

 

 하지만 name3과 name4와 같이 String 클래스의 인스턴스를 생성해서 String 타입의 변수에 할당하는 방법을 사용하면 문자열의 내용이 같을지라도 별개의 인스턴스가 따로 생성된다. 따라서, name3과 name4가 할당받게 되는 인스턴스의 참고밧은 서로 다르다. 서로 다른 인스턴스의 주소값을 저장하고 있다는 것이다.


 위의 두 방식은 공통적으로 참조 타입의 변수에 할당된다. 즉, 위의 모든 변수 name은 실제 문자열의 내용을 값으로 가지고 있는 것이 아니라 문자열이 존재하는 메모리 공간 상의 주소값을 저장하고 있다.

 

 하지만 문자열을 출력해보면 아래와 같이 주소값이 아니라 문자열의 내용이 출력된다.

 

 

 그 이유는 String 타입의 변수를 참조하면 String 클래스의 메서드인 toString()이 자동으로 호출되기 때문이다. toString()이 자동으로 호출되면 String 타입의 변수가 저장하고 있는 주소값에 위치한 String 인스턴스의 내용을 문자열로 변환해준다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] 콘솔 입출력(I/O)  (0) 2022.12.22
[Java] 연산자(Operator)  (0) 2022.12.22
[Java] 타입(Type)  (0) 2022.12.21
[Java] 변수(Variable)와 상수(Constant)  (0) 2022.12.21
[Java] Java란?  (0) 2022.12.21