: String class는 문자열의 타입으로 사용되며 메서드들을 가지고 있다.
String name1 = "wooj";
String name2 = new String("wooj");
// name1과 name2는 문자열이 존재하는 메모리 공간 상의 주소값을 저장한다.
System.out.print(name1); // "wooj"
System.out.print(name2); // "wooj"
=> 주소값이 아닌 문자열이 반환되었다
why??
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 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'
해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 첫 문자부터 비교한다.
해당 문자열이
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는 다르기에 아스키코드 차이를 반환한다.
compareToIgnoreCase() 메서드를 사용한다면 대소문자 구분을 하지않게 된다.
System.out.println( str.compareToIgnoreCase("ABCD") ); // 0