해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.
문자열 자료형 String
0개 ~ 다수의 문자들로 구성
" " 로 둘러쌈
이제까지 배운 자료형들은 데이터 하나에 지정된 메모리 바이트가 있는 원시 자료형이었으나 (int : 4바이트) 문자열은 문자가 몇 개 들어갈지 모르기 때문에 참조 자료형임 - 그러나 특별히 원시값과 유사하게 사용될 수 있음
// 리터럴 방식
String str1 = "Hello World!";
String str2 = "안녕하세요 😆 반갑습니다~ 🖐️🖐️🖐️";
// 빈 문자열 가능
String str3 = "";
// 인스턴스 생성 방식
String str4 = new String("나중에 자세히 배웁니다.");
▼ 클래스의 인스턴스
일단, 단순 값 뿐 아니라 특정 기능들을 가진 무언가로 이해할 것
객체지향 섹션에서 상세히 다룸
문자열 간의 비교
▶ 리터럴 방식으로 생성한 문자열끼리는 ==을 사용하여 비교가 가능함
▶ 인스턴스는 ==을 사용하여 비교 X!!!
▶ 인스턴스와 비교하려면 .equals 메소드를 사용해야 함
(특별한 경우가 아니면 어떤 방식으로 생성했든 문자열은 .equals로 비교할 것)
※ .equalsIgnoreCase : 대소문자 구분없이 문자열 비교
※ 왜 그럴까?!※
▼▼▼▼ ▼ ▼▼▼▼▼▼
== : 동일한 주소값을 가지는가?
equals : 주소값에 상관없이 동일한 내용을 가지는가?
리터럴로 생성 시 : String constant pool 내에 중복 없이 저장되기 때문에 같은 내용의 문자열에 대해 동일한 주소값을 가지게 됨
객체 인스턴스 생성 시 : 그 외의 영역에 매 번 새로 생성 되어 각각 따로 저장됨(다른 주소값을 가짐)
▲ 자바에서 string과 같은 참조 자료형을 =으로 다른 곳에 대입하면 동일한 주소값을 주는 것임 (같은 곳을 가리킴) → hl5는 hl4와 동일한 주소값을 가지게 됨
// += 연산자:(-= *= /= 불가!)
// 1. ⭐️ 해당 변수에 문자열을 이어붙임 (부수효과)
String str_c1 = "나는 아무 생각이 없다. ";
str_c1 += "왜냐하면 ";
// 2. 그 결과를 반환
String str_c2 = str_c1 += "아무 생각이 없기 때문이다.";
// str_c2와 str_c1 모두 "나는 아무 생각이 없다. 왜냐하면 아무 생각이 없기 때문이다."
boolean bool_c = (str_c1).equals(str_c2); //true
// ⚠️ 상수에는 적용할 수 없음
final String str_d = "헬로";
// str_d += "월드"; //불가!!!
▶ 자료형 클래스.parse자료형이름(문자열)을 사용하여 문자열을 타 자료형으로 변환 가능
▲ boolean 자료형은 대소문자 무관하게 'true'일 때만 true를 반환함
▲문자열 내 n번째 문자 반환 시 charAt(n) 사용
▶ 런타임 에러 : 컴파일러가 걸러내지 못하는 에러 (프로그램 실행 중에 발생)
// ⚠️ 런타임 에러 발생 (컴파일 완료 후 실행 단계에서 오류 발생)
// '실행'으로 테스트하거나, 디버그 후 콘솔 탭에서 확인해볼 것
// byte bytNum2 = Byte.parseByte("12345"); //바이트 범위 넘음
// int intNum2 = Integer.parseInt("123.45"); //정수가 아닌 실수임
// double dblNum2 = Integer.parseInt("하나"); //숫자가 아닌 문자임
이스케이프 표현 escape sequence
이스케이프 표현
대체
\"
큰따옴표
\'
작은따옴표
\n
줄바꿈
\t
탭
\\
백슬래시 하나
String str = "문자열에 \"큰따옴표\"도,\n엔터도 넣을 수 있다고?";
System.out.println(str);