1. String 참조자료형
※ 참조자료형 : 데이터가 메모리에 저장되면, 해당 데이터의 첫 번째 주소를 참조하는 자료형
1) String 클래스
- 문자열 저장 클래스 타입
- 문자열은 쌍따옴표 (" ")안에 표기
- 문자열 데이터는 String 이라는 클래스를 기반으로 만듦
※ 클래스(Class) : 참조자료형의 설계도. 그 안에는 참조자료형이 가진 속성이나 기능에 대한 정의가 쓰여있음
※ 객체(Object) : 클래스를 본 떠 만든 실제 대상
※ 클래스가 붕어빵 기계이면 객체는 붕어빵을 비유
// Example
String a = "apple" // String : 클래스, apple : 객체
2) String 객체를 생성하는 2가지 방법
- 방법 1. new 키워드를 사용한 객체 생성
// 기본 문법 구조
String 참조변수명 = new String("문자열");
// Example
String a = new String("안녕");
- 방법 2. 참조변수에 바로 문자열 리터럴 입력
// 기본 문법 구조
String 참조변수명 = "문자열";
// Example
String a = "안녕";
3) 일반적인 참조자료형과는 다르게 String 클래스만이 가지고 있는 2가지 특징
- 특징 1 : 객체내의 값 변경 불가능 → 값 변경시, 새로운 객체를 생성하여 작성
// Example
String str1 = new String("안녕");
String str2 = str1; // 이 과정으로 주소가 복사됨
str1 = "안녕하세요";
System.out.println(str1); // 안녕하세요
System.out.println(str2); // 안녕
// 문자열은 새로운 값을 대입하면, 변경이 되는 것이 아니라 주소를 바꿈
// Example 참조자료형 경우
int[] array1 = new int[] {3, 4 ,5};
int[] array2 = array1;
array1[0] = 6;
array1[1] = 7;
array1[2] = 8;
System.out.println(Arrays.toString(array1)); // [6, 7, 8]
System.out.println(Arrays.toString(array2)); // [6, 7, 8]
- 특징 2 : 리터럴을 바로 입력한 데이터는 문자열이 같은 경우 하나의 객체를 공유
// Example1
String name = new String("abba");
String name2 = new String("abba");
String name3 = "abba";
String name4 = "abba"; // 이미 존재하는 "abba"를 함께 가리킴
// String은 클래스(설계도) 이름임
// new String()은 String에 설계되어 있는대로 데이터를 생성하겠다는 뜻
// Example2
String str1 = new String("안녕");
String str2 = "안녕";
String str3 = "안녕";
String str4 = new String("안녕");
// stack 메모리값 비교 (객체의 번지(위치))
System.out.println(str1 == str2) // false
System.out.println(str2 == str3) // true
System.out.println(str3 == str4) // false
System.out.println(str4 == str1) // false
4) String 객체의 '+' 연산 (Plus Operation)
- CASE #1. 문자열 + 문자열 → 문자열을 연결
// Example
String str1 = "안녕" + "하세요" + "!";
System.out.println(str1); // 안녕하세요!
String str2 = "반갑";
str2 += "습니다";
str2 += "!";
System.out.println(str2); // 반갑습니다!
- CASE #2. 문자열 + 기본자료형 또는 기본자료형 + 문자열 → 기본자료형을 문자열로 변환 + 문자열 연결
// Example1
String str1 = "안녕" + 1;
String str2 = "안녕" + String.valueOf(1);
// String.valueOf(기본자료형) → 기본자료형을 String으로 변환
String str3 = "안녕" + "1";
System.out.println(str1); // 안녕1
System.out.println(str2); // 안녕1
System.out.println(str3); // 안녕1
// Example2
System.out.println(1 + "안녕"); // 1안녕
System.out.println(1+"안녕"+2); // 1안녕2
System.out.println("안녕"+1+2); // 안녕12 (안녕 + 1 을 한 뒤에 + 2를 하므로 안녕12)
System.out.println(1+2+"안녕"); // 3안녕 (1 + 2 를 한 뒤에 + 안녕을 하므로 3안녕)
5) String의 주요 메소드 (다 안 외워도 상관없음)
※ . : 객체가 가지고 있는 ex) sample.
※ 모든 메소드는 사용시 소괄호 '( )'를 사용
※ 속성은 객체가 가진 기능 (소괄호가 붙어야 함)
- 문자열 길이 length()
// Example
String sample = "I hate Java!!";
System.out.println(sample.length()); // 13
- 문자열 내용비교 equals( ), equalsIgnoreCase( ) ( I : 대문자 i)
// Example
String str1 = new String("Java");
String str2 = new String("Java"); // 두 문자열은 내용은 같으나 주소가 다름
// 참조자료형은 등가 비교시. 주소를 비교함
System.out.println(str1 == str2); // false
// 값을 비교하려면, 그 때는 equals 메소드를 사용
System.out.println(str1.equals(str2)); // true
'Programming Language > Java' 카테고리의 다른 글
클래스의 기본 문법 - 2. 클래스의 활용 (0) | 2022.07.08 |
---|---|
클래스의 기본 문법 - 1. 클래스 개념 및 기본 구조 (0) | 2022.07.08 |
참조자료형 - 4. main( ) 메소드 매개변수 (0) | 2022.07.07 |
참조자료형 - 3. 2차원 배열 (0) | 2022.07.07 |
참조자료형 - 2. 1차원 배열 (세 가지 초기값 부여방식 및 출력하기) (0) | 2022.07.07 |