Back-end

[JAVA] 자바 독학기 #8 - 문자열 자료형과 기초 사용법(feat. 얄팍한 코딩사전)

리스보아 2023. 8. 24. 08:25
반응형

문자열 자료형과 기초 사용법

 

 

다른 포스팅들과 마찬가지로

얄코 자바 강의를 들으며 내가 모르는 내용, 제대로 몰랐던 내용을 위주로 기록하였다!

 

 

 

🔸목차

문자열 자료형(String)

String Pool(String Constant Pool) 

문자열의 기타 특징

이스케이프 표

 

 


 

 

🔸문자열 자료형(String) ?

- 영어든, 한글이든, 빈 문자열이든, 이모티콘이등 다 가능

- '' 가 아닌 "" 안에 입력

- 다른 자료형들은 데이터 하나에 지정된 메모리 용량이 있었으나, string은 정해지지 않았음

- 원시자료형 X, 참조 자료형O. 하지만 원시값과 유사하게 사용될 수 있음

 

 

생성 방식

- 리터럴 방식

String str1 = "Hello World!";

- 인스턴스 생성 방식 (단순히 문자열만이 아니라 내부에 다양한 정보가 포함되어있음)

String str2 = new String("이렇게도 생성 가능해요.");

 

 

 

🔸String Pool(String Constant Pool) 

리터럴로 정의한 변수는 Heap 안에 String Pool 이란 공간에 따로 저장됨

>> 같은 문자열이 적힌 리터럴 변수들은 같은 것을 가리킴

 

인스턴스 방식으로 정의한 변수는 Heap 공간안에 저장되어 있음

>> 값에 상관없이 매번 새로 생성되어 각각 자리를 차지함

 

String str1 = "abc";
String str2 = "abc";

String str3 = new String("abc");

boolean bool1 = str1 == str2;  // true
boolean bool2 = str1 == str3;  // false

 

리터럴로 만든 변수와 인스턴스 방식으로 생성한 변수를 비교하기 위해서는

equals() 를 사용해야함

 

boolean bool1 = str1 == str3;  // false
boolean bool2 = str1.equals(str3);  // true

 

== : 같은 종이에 적혀 있는가?

equals : 같은 글이 적혀있는가?

 

 

객체 인스턴트의 경우 = 를 이용하면 메모리 주소가 복사

>> 새로 공간을 차지하는게 아니라 같은 곳을 바라봄

>> == 으로 비교해도 true

>> 문자열은 equals로 비교하는 것이 권장됨

 

String str4 = new String("bcd");
String str5 = str4;

boolean bool3 = str5 == str4;  // true

 

 

+ 각각의 메모리상 주소 식별자 비교

int str1Hash = System.identityHashCode(str1);   // 메모리 주소값 출력됨

 

 

 

🔸문자열의 기타 특징

1. 리터럴로 선언해도 객체 인스턴스로 생성됨

>> 객체의 기능인 메소드도 사용 가능

>> 객체와 비교도 가능

 

String study = "공부중";

boolean bool1 = study.equals("공부중");  // true
boolean bool2 = "공부중".equals("공부중");  // true
boolean bool3 = "공부중".equals(study1);  // true

 

 

2. 문자열을 서로 더하면 이어붙여줌(+=도 동일)

 

3. 문자열에는 -=, +=, *= 사용 불가능

 

4. 타 자료형과 연산?

문자열과 타 자료형을 더해주면 모두 이어붙여줌

 

5. 타 자료형을 문자열로 변환

1) valueOf() 사용

String str1 = String.valueOf(true);  // "true"
String str2 = String.valueOf(123);  // "123"
String str3 = String.valueOf(3.14f);  // "3.14"  // f 빼버
String str4 = String.valueOf('가');  // "가"

 

2) "" 더해주기 -> 더 간편함

String str5 = true + "";
String str6 = 123.45 + "";

 

 

6. 문자열을 정수 자료형으로 변환

parse***() 사용

String str_test = "123";

byte byteNum = Byte.parseByte(str_test);  // byteNum: 123
short srtNum = Short.parseShort(str_test);  // srtNum: 123

// 하지만 변환할 자료형에 맞는 값을 넣어줘야 함
byte byteNum2 = Byte.parseByte("12345");  // 컴파일 단계에서는 에러가 없지만 실행하면 에러남(런타임 오류)


// boolean 자료형의 경우
// 대소문자 무관 true 인 경우만 true 반환

boolean bool1 = Boolean.parseBoolean("TRUE");  // bool1: true
boolean bool2 = Boolean.parseBoolean("true");  // bool2: true
boolean bool3 = Boolean.parseBoolean("A");  // bool3: false

 

 

🔸이스케이프 표

" " 안에 " "를 넣고싶은데 넣으면 컴파일 에러가 남

엔터도 넣지 못함

 

String str1 = "난 이 문장에 "이거를" 넣고 싶은데";  // Error

// " 앞에 이스케이프 표인 \ 을 쓰면 됨
// 엔터는 \n을 사용

String str2 = "난 이 문장에 \"이거를\" 넣고, \n엔터도 넣고 싶어.";

 

기타

\t : tab

\\ : 백슬래시 하나

 

 

반응형