1. java.lang.String


1) 2가지 작성법

(1) String str = "Java";

(2) String str = new String("Java");


2) String 클래스는 final 키워드가 붙어있다. 

(1) 때문에 임의의 변경이 불가능(immutable)하다.

(2) 다른 클래스의 조상이 될 수 없다.


* final 키워드가 붙은 메소드는 상속 관계 시 오버라이딩이 될 수 없다.

final 키워드는 마지막, 최종으로 수정이 불가능한 의미이고,

오버라이딩은 이미 있는 메소드를 재정의 하는 의미인데 두 의미가 상충하기 때문이다.



# String 클래스 객체의 비교

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package stringex;
 
public class StringTest01 {
    public static void main(String[] args) {
        
        String str1 = "abc";
        String str2 = "abc";
        
        System.out.println("str1.equals(str2): " + (str1.equals(str2)));
        System.out.println("str1 == str2: " + (str1 == str2));
        
        
        String str3 = new String("java");
        String str4 = new String("java");
        
        System.out.println("str3.equals(str4): " + (str3.equals(str4)));
        System.out.println("str3 == str4: " + (str3 == str4));
        
    }
}
 
# 실행 결과
str1.equals(str2): true
str1 == str2: true
str3.equals(str4): true
str3 == str4: false
cs

# 설명

- equals() 메소드는 이미 오버라이딩으로 데이터값만 같은지 비교하는 것으로, String 객체들끼리 주소값까지 같은지를 비교할 수 없다. 

이는 '== 연산자'를 통하여 비교하여야 한다. 




# String 클래스의 초기화

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package stringex;
 
public class StringTest02 {
    public static void main(String[] args) {
 
        int num1 = 0;
        double num2 = 0.0;
        
        int[] arr = null;
        arr = new int[10];
        
        String str1 = null;
        System.out.println(str1 + "null 초기화");
 
        String str2 = "";
        System.out.println(str2 + "null 초기화");
        
    }
}
 
# 실행 결과
nullnull 초기화
null 초기화
cs

# 설명

Line 6~7: 기본형 데이터 타입의 초기화는 0으로 표현한다.

Line 9~10: 기본형 데이터 타입 배열의 초기화는 우선 null로 표현하며 그 후에 배열의 길이를 선언해준다 .

Line 12: String 변수를 null로 초기화하게 되면 Line 22와 같이 출력이 된다.

그 이유는 다른 문자열과 함께 사용하였을 때 null 키워드가 문자열로 바뀐다.

Line 15: 때문에 객체형이지만 null이 아닌 ""로 초기화를 하는 것이 좋다. 



# String 클래스의 메소드 활용 예시 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package stringex;
 
import java.util.Scanner;
 
public class StringTest03 {
    public static void main(String[] args) {
 
        String name = "lEe sUn sHin";
        
        // * String은 공백까지 인덱스에 포함 
        // 1. 첫번째 s의 위치 
        int idx = name.indexOf("s");
        System.out.println("s의 첫번째 위치: " + idx);
        
        // 2. 마지막 s의 위치
        idx = name.lastIndexOf("s");
        System.out.println("s의 마지막 위치: " + idx);
        
        // 3. m의 위치 
        idx = name.indexOf("m");
        System.out.println("m의 위치: " + idx);
        System.out.println("m의 위치: " + (idx == -"없다" : idx));
        
        // 4. name을 대문자, 소문자로 각각 바꾸기 
        System.out.println(name.toUpperCase());
        System.out.println(name.toLowerCase());
        
        // 5. name을 대문자로 바꾼 후, 대문자 S를 출력 
        // 체인 시스템의 마지막 메서드의 반환값을 타입으로 지정해야 한다. 
        char ch = name.toUpperCase().charAt(4);
        System.out.println("대문자 S 출력: " + ch);
        
        // 6. name에 사용자가 입력한 문자열이 있는지 판단 
        Scanner sc = new Scanner(System.in);
        System.out.print("검색할 문자열 입력: ");
        String str = sc.next();
        if (name.contains(str)) {
            System.out.println(name + "에 " + str + "이(가) 있습니다.");
        }else {
            System.out.println("해당 문자열은 없습니다.");
        }
        
    }
}
 
# 실행 결과
s의 첫번째 위치: 4
s의 마지막 위치: 8
m의 위치: -1
m의 위치: 없다
LEE SUN SHIN
lee sun shin
대문자 S 출력: S
검색할 문자열 입력: in
lEe sUn sHin에 in이(가) 있습니다.
cs

# 설명

- String 클래스에 있는 메소드들을 활용한 예시

String은 공백까지 저장하여 인덱스에 포함된다.