String 클래스 - 문자열의 타입

wooj·2022년 9월 19일
0

Java

목록 보기
5/5

String 클래스

: String class는 문자열의 타입으로 사용되며 메서드들을 가지고 있다.

  • 문자열 리터럴을 String 타입의 변수 name1에 할당하는 방법
String name1 = "wooj";  
  • String 클래스의 인스턴스를 생성하여 name2에 할당하는 방법
String name2 = new String("wooj");

// name1과 name2는 문자열이 존재하는 메모리 공간 상의 주소값을 저장한다.

System.out.print(name1); // "wooj"
System.out.print(name2); // "wooj"

=> 주소값이 아닌 문자열이 반환되었다

why??

  • String 타입의 변수를 참조시 String 클래스의 메서드인 toString()이 자동으로 호출된다.
  • String 타입의 변수가 저장하고 있는 주소값에 위치한 String 인스턴스의 내용을 문자열로 변환.

⭐ 문자열 리터럴 할당 vs 객체할당

String name1 = "wooj";
String name2 = "wooj";

String name3 = new String("wooj");
String name4 = new String("wooj");

boolean comparison1 = name1 == "wooj";            // true (문자열 리터럴은 내용이 같다면 같은 주소값을 가지기 때문)
boolean comparison2 = name1 == name2;             // true (문자열 리터럴은 내용이 같다면 같은 주소값을 가지기 때문)
boolean comparison3 = name1 == name3;             // false (별개의 인스턴스가 생성되어 주소가 다르다)
boolean comparison4 = name3 == name4;             // false (별개의 인스턴스가 생성되어 주소가 다르다)
boolean comparison5 = name1.equals("wooj");       // true (equals() 메서드를 통해 문자열이 같으므로 true 반환 )
boolean comparison6 = name1.equals(name3);        // true (equals() 메서드를 통해 문자열이 같으므로 true 반환 )
boolean comparison7 = name3.equals(name4);        // true (equals() 메서드를 통해 문자열이 같으므로 true 반환 )
  • 동일한 문자열 리터럴을 할당하는 경우 두 변수는 같은 문자열의 참조값을 공유한다.
    => name1, name2가 저장하고 있는 주소값은 동일하다.

  • String 클래스의 인스턴스를 생성하게 되면 문자열이 같더라도, 별개의 인스턴스가 따로 생성된다.
    => name3, name4는 다른 주소값을 저장한다.

  • .equals()는 문자열 내용을 비교하며 == 는 저장한 주소값을 비교한다.

⭐ String 클래스의 메서드

1. charAt( )

해당 문자열의 특정 인덱스에 해당하는 문자를 반환

String str = new String("Wooj");
System.out.println(str); // "wooj"

System.out.println(str.charAt(0)); // 'w'
System.out.println(str.charAt(1)); // 'o'
System.out.println(str.charAt(2)); // 'o'
System.out.println(str.charAt(3)); // 'j'

2. compareTo( )

해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 첫 문자부터 비교한다.
  • 전달된 문자열과 같다면 0

  • 전달된 문자열보다 작으면 음수

  • 전단될 문자열보다 크면 양수

    compareToIgnoreCase() 메서드를 사용한다면 대소문자 구분을 하지않게 된다.

	String str = "abcd";
    
     System.out.println( str.compareTo("abcd") );    // 0  (같으므로 0)
     System.out.println( str.compareTo("ab") );  //  2 (abcd와 ab의 길이차이가 2이므로 2반환)
     System.out.println( str.compareTo("a") );  //  3 (길이차이가 3이므로 3반환)
     
     System.out.println( "".compareTo(str) );  //  -4 (길이차가 4이므로 4 반환)
         
System.out.println( str.compareTo("c") );  //  -2      

// 첫문자부터 바로 다를 경우 아스키코드를 비교하여 값을 반환한다. 

System.out.println( str.compareTo("ABCD") );  //  32
// 마찬가지로 a와 A는 다르기에 아스키코드 차이를 반환한다
System.out.println( str.compareToIgnoreCase("ABCD") ); // 0

3. concat( )

해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환
String str = new String("wooj");
System.out.println("문자열 : " + str);                         // wooj
System.out.println(str.concat("coding"));                     // woojcoding

4. indexOf( )

해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환

  • 전달된 문자나 문자열이 포함되어 있지 않으면 -1을 반환
String str = new String("wooj coding");    
System.out.println(str.indexOf('o'));         // 1
System.out.println(str.indexOf('a'));         // -1
System.out.println(str.indexOf("wooj"));     // 0
System.out.println(str.indexOf("coding"));   // 5

5. trim( )

해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거
String str = new String(" wooj   ");
        System.out.println("문자열 : " + str);    //문자열 :  wooj   
        System.out.println(str + '@');           // wooj   @
        System.out.println(str.trim() + '@');    //wooj@

6. toLowerCase( ) toUpperCase( )

해당 문자열의 모든 문자를 소문자로 변환 / 해당 문자열의 모든 문자를 대문자로 변환

String str = new String("Wooj");
System.out.println(str.toLowerCase());    // wooj
System.out.println(str.toUpperCase());    // WOOJ
profile
wooj

0개의 댓글