개발일지/Java

Java 문자열(String)

E-room 2022. 9. 4. 17:06
728x90

자바는 String 클래스 타입을 사용해서 문자열을 다룬다

 

String 타입은 큰따옴표("")로 감싸진 문자열을 의미한다.

 

변수 선언과 할당

// 문자열 리터럴을 String 타입의 변수 name에 할당
String name1 = "Kim eroom";

// String 클래스의 인스턴스를 생성하는 방법
String name2 = new String("Kim eroom");

 

 

  • String 타입의 변수는 String 변수명; 으로 선언 가능
  • 선언한 변수에 문자열을 할당하는 방법
    1. 선언한 변수에 문자열 리터럴을 할당하는 방법 : 변수 = "문자열";
    2. String 클래스의 인스턴스를 생성하여 할당 : 변수 = new String("문자열");

 

1번과 2번의 공통점

  • 참조 타입의 변수에 할당됨 -> 실제 문자열의 내용을 값으로 가지고 있는 것이 아니라, 문자열이 존재하는 메모리 공간 상의 주소 값을 저장 중

하지만, 문자열을 출력해보면 주소값이 아닌 문자열의 내용이 출력됨.

String name1 = "Kim eroom";
String name2 = new String("Kim eroom");

System.out.print(name1); // "Kim eroom"
System.out.print(name2); // "Kim eroom"

 

이것은 String 타입의 변수를 참조하면 String 클래스의 메서드인 toString() 이 자동으로 호출되기 때문

toString()은 String 타입의 변수가 저장하고 있는 주소 값에 위치한 String 인스턴스의 내용을 문자열로 반환해준다.

 

1번과 2번의 차이점

String name1 = "Kim eroom";
String name2 = "Kim eroom";

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

boolean comparison1 = name1 == "Kim eroom";      // true
boolean comparison2 = name1 == name2;             // true
boolean comparison3 = name1 == name3;             // false
boolean comparison4 = name3 == name4;             // false
boolean comparison5 = name1.equals("Kim eroom"); // true
boolean comparison6 = name1.equals(name3);        // true
boolean comparison7 = name3.equals(name4);        // true

 

name1과 name2는 1번 방법

문자열 리터럴을 String 타입의 변수에 직접 할당하는 방법을 사용

동일한 문자열 리터럴을 두 변수에 할당하는 경우, 두 변수는 같은 문자열의 참조값을 공유

-> 문자열 주소값을 할당받았는데 그게 직접적인 문자열을 가리키는 주소 값

 

name3와 name4는 2번 방법

String 클래스의 인스턴스를 생성해서 String 타입의 변수에 할당하는 방법을 사용

String 클래스의 인스턴스를 생성하게 되면 문자열의 내용이 같을지라도, 별개의 인스턴스가 따로 생성됨

728x90